On Sun, Sep 18, 2016 at 12:04:48PM +0200, Mark Kettenis wrote: > Somewhere down the line the ARM people made some subtle changes to > their assembly syntax. The new syntax is called Unified Assembler > Language (UAL), and tis is what clang supports. But gas defaults to > the old pre-UAL dialect. The easiest way to make code compile with > both clang and gcc is to tell gas to switch into UAL mode. The > following diff does this for the one file in libc where it matters. > The resulting binary code is identical. > > ok?
We already do this for some files in the kernel ./arch/arm/arm/in_cksum_arm.S:.syntax unified ./lib/libkern/arch/arm/memcpy.S:.syntax unified ./lib/libkern/arch/arm/memset.S:.syntax unified ok jsg@ > > > Index: lib/libc/arch/arm/string/ffs.S > =================================================================== > RCS file: /cvs/src/lib/libc/arch/arm/string/ffs.S,v > retrieving revision 1.5 > diff -u -p -r1.5 ffs.S > --- lib/libc/arch/arm/string/ffs.S 6 Aug 2016 19:16:09 -0000 1.5 > +++ lib/libc/arch/arm/string/ffs.S 18 Sep 2016 09:53:30 -0000 > @@ -44,6 +44,8 @@ > * 16 Feb 1994. > */ > > + .syntax unified > + > ENTRY(ffs) > /* Standard trick to isolate bottom bit in r0 or 0 if r0 = 0 on entry */ > rsb r1, r0, #0 > @@ -58,7 +60,7 @@ ENTRY(ffs) > rsbne r0, r0, r0, lsl #16 /* r0 = X * 0x0450fbaf */ > > /* now lookup in table indexed on top 6 bits of r0 */ > - ldrneb r0, [ r2, r0, lsr #26 ] > + ldrbne r0, [ r2, r0, lsr #26 ] > > mov pc, lr > END_WEAK(ffs) >
