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 <[EMAIL PROTECTED]> _______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core