All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-core] [PATCH - ARM] ldrex/strex syntax errors with recent compilers
@ 2007-03-15 13:53 Stelian Pop
  2007-03-15 13:57 ` [Adeos-main] " Stelian Pop
  2007-03-15 16:02 ` [Xenomai-core] " Stelian Pop
  0 siblings, 2 replies; 4+ messages in thread
From: Stelian Pop @ 2007-03-15 13:53 UTC (permalink / raw)
  To: xenomai

Hi,

Trying to build a xenomai-enabled kernel using a recent compiler (tried
with gcc version 4.1.1 (CodeSourcery ARM Sourcery G++ 2006q3-26), but
all gcc > 4.1 might be affected) results in the following:

  CC      kernel/xenomai/nucleus/shadow.o
/tmp/cc0XooxH.s: Assembler messages:
/tmp/cc0XooxH.s:1464: Error: instruction does not accept this addressing mode -- `ldrex r1,r2'
/tmp/cc0XooxH.s:1466: Error: instruction does not accept this addressing mode -- `strex r3,r1,r2'

Older gcc (like gcc version 4.0.0 (DENX ELDK 4.1 4.0.0)) have no problem with this.

It appears that the patch below fixes the compile error. I also verified 
that gcc-4.0.0 generates identical code using both forms.

Index: include/asm-arm/atomic.h
===================================================================
--- include/asm-arm/atomic.h	(révision 2299)
+++ include/asm-arm/atomic.h	(copie de travail)
@@ -40,9 +40,9 @@
     unsigned long tmp, tmp2;
 
     __asm__ __volatile__("@ atomic_set_mask\n"
-"1: ldrex   %0, %2\n"
+"1: ldrex   %0, [%2]\n"
 "   orr     %0, %0, %3\n"
-"   strex   %1, %0, %2\n"
+"   strex   %1, %0, [%2]\n"
 "   teq     %1, #0\n"
 "   bne     1b"
     : "=&r" (tmp), "=&r" (tmp2)
@@ -170,9 +170,9 @@
     unsigned long tmp, tmp2;
 
     __asm__ __volatile__("@ atomic_set_mask\n"
-"1: ldrex   %0, %2\n"
+"1: ldrex   %0, [%2]\n"
 "   orr     %0, %0, %3\n"
-"   strex   %1, %0, %2\n"
+"   strex   %1, %0, [%2]\n"
 "   teq     %1, #0\n"
 "   bne     1b"
     : "=&r" (tmp), "=&r" (tmp2)
@@ -185,9 +185,9 @@
     unsigned long tmp, tmp2;
 
     __asm__ __volatile__("@ atomic_clear_mask\n"
-"1: ldrex   %0, %2\n"
+"1: ldrex   %0, [%2]\n"
 "   bic     %0, %0, %3\n"
-"   strex   %1, %0, %2\n"
+"   strex   %1, %0, [%2]\n"
 "   teq     %1, #0\n"
 "   bne     1b"
     : "=&r" (tmp), "=&r" (tmp2)

-- 
Stelian Pop <stelian.pop@domain.hid>



^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Adeos-main] [PATCH - ARM] ldrex/strex syntax errors with recent compilers
  2007-03-15 13:53 [Xenomai-core] [PATCH - ARM] ldrex/strex syntax errors with recent compilers Stelian Pop
@ 2007-03-15 13:57 ` Stelian Pop
  2007-03-18 16:18   ` Gilles Chanteperdrix
  2007-03-15 16:02 ` [Xenomai-core] " Stelian Pop
  1 sibling, 1 reply; 4+ messages in thread
From: Stelian Pop @ 2007-03-15 13:57 UTC (permalink / raw)
  To: adeos-main

Le jeudi 15 mars 2007 à 14:53 +0100, Stelian Pop a écrit :

[on xenomai-core ml]
> Hi,
> 
> Trying to build a xenomai-enabled kernel using a recent compiler (tried
> with gcc version 4.1.1 (CodeSourcery ARM Sourcery G++ 2006q3-26), but
> all gcc > 4.1 might be affected) results in the following:
> 
>   CC      kernel/xenomai/nucleus/shadow.o
> /tmp/cc0XooxH.s: Assembler messages:
> /tmp/cc0XooxH.s:1464: Error: instruction does not accept this addressing mode -- `ldrex r1,r2'
> /tmp/cc0XooxH.s:1466: Error: instruction does not accept this addressing mode -- `strex r3,r1,r2'
> 
> Older gcc (like gcc version 4.0.0 (DENX ELDK 4.1 4.0.0)) have no problem with this.
> 
> It appears that the patch below fixes the compile error. I also verified 
> that gcc-4.0.0 generates identical code using both forms.

The same issue is present in the mainline kernel too. I'll report this
on LKML but meanwhile the patch below could be included in the Adeos
patch as well...

Thanks.

Stelian.

diff --git a/include/asm-arm/atomic.h b/include/asm-arm/atomic.h
index c86c3d0..5dda903 100644
--- a/include/asm-arm/atomic.h
+++ b/include/asm-arm/atomic.h
@@ -103,9 +103,9 @@ static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr)
 	unsigned long tmp, tmp2;
 
 	__asm__ __volatile__("@ atomic_clear_mask\n"
-"1:	ldrex	%0, %2\n"
+"1:	ldrex	%0, [%2]\n"
 "	bic	%0, %0, %3\n"
-"	strex	%1, %0, %2\n"
+"	strex	%1, %0, [%2]\n"
 "	teq	%1, #0\n"
 "	bne	1b"
 	: "=&r" (tmp), "=&r" (tmp2)

-- 
Stelian Pop <stelian@domain.hid>



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [Xenomai-core] [PATCH - ARM] ldrex/strex syntax errors with recent compilers
  2007-03-15 13:53 [Xenomai-core] [PATCH - ARM] ldrex/strex syntax errors with recent compilers Stelian Pop
  2007-03-15 13:57 ` [Adeos-main] " Stelian Pop
@ 2007-03-15 16:02 ` Stelian Pop
  1 sibling, 0 replies; 4+ messages in thread
From: Stelian Pop @ 2007-03-15 16:02 UTC (permalink / raw)
  To: xenomai

Le jeudi 15 mars 2007 à 14:53 +0100, Stelian Pop a écrit :

> It appears that the patch below fixes the compile error. I also verified 
> that gcc-4.0.0 generates identical code using both forms.

FWIW, the same fix at a different place in the mainline kernel has been
acked by Catalin Marinas from ARM.

Ah, and the patch I submitted was against the 2.3.x branch although it
will probably apply more or less cleanly on trunk.

Thanks,

-- 
Stelian Pop <stelian.pop@domain.hid>



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Adeos-main] [PATCH - ARM] ldrex/strex syntax errors with recent compilers
  2007-03-15 13:57 ` [Adeos-main] " Stelian Pop
@ 2007-03-18 16:18   ` Gilles Chanteperdrix
  0 siblings, 0 replies; 4+ messages in thread
From: Gilles Chanteperdrix @ 2007-03-18 16:18 UTC (permalink / raw)
  To: Stelian Pop; +Cc: adeos-main

Stelian Pop wrote:
 > Le jeudi 15 mars 2007 ~ 14:53 +0100, Stelian Pop a ~crit :
 > 
 > [on xenomai-core ml]
 > > Hi,
 > > 
 > > Trying to build a xenomai-enabled kernel using a recent compiler (tried
 > > with gcc version 4.1.1 (CodeSourcery ARM Sourcery G++ 2006q3-26), but
 > > all gcc > 4.1 might be affected) results in the following:
 > > 
 > >   CC      kernel/xenomai/nucleus/shadow.o
 > > /tmp/cc0XooxH.s: Assembler messages:
 > > /tmp/cc0XooxH.s:1464: Error: instruction does not accept this addressing mode -- `ldrex r1,r2'
 > > /tmp/cc0XooxH.s:1466: Error: instruction does not accept this addressing mode -- `strex r3,r1,r2'
 > > 
 > > Older gcc (like gcc version 4.0.0 (DENX ELDK 4.1 4.0.0)) have no problem with this.
 > > 
 > > It appears that the patch below fixes the compile error. I also verified 
 > > that gcc-4.0.0 generates identical code using both forms.
 > 
 > The same issue is present in the mainline kernel too. I'll report this
 > on LKML but meanwhile the patch below could be included in the Adeos
 > patch as well...

Applied all your patches. Thanks.

-- 


					    Gilles Chanteperdrix.


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2007-03-18 16:18 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-03-15 13:53 [Xenomai-core] [PATCH - ARM] ldrex/strex syntax errors with recent compilers Stelian Pop
2007-03-15 13:57 ` [Adeos-main] " Stelian Pop
2007-03-18 16:18   ` Gilles Chanteperdrix
2007-03-15 16:02 ` [Xenomai-core] " Stelian Pop

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.