Re: [PATCH 2/3] ARM: uaccess: use unified assembler language syntax

From: Stefan Agner
Date: Wed Jan 02 2019 - 10:09:09 EST


On 30.12.2018 20:12, kbuild test robot wrote:
> Hi Stefan,
>
> I love your patch! Yet something to improve:
>
> [auto build test ERROR on arm/for-next]
> [also build test ERROR on v4.20 next-20181224]
> [if your patch is applied to the wrong git tree, please drop us a note
> to help improve the system]
>
> url:
> https://github.com/0day-ci/linux/commits/Stefan-Agner/ARM-fix-argument-count-to-match-macro-definition/20181231-001137
> base: git://git.armlinux.org.uk/~rmk/linux-arm.git for-next
> config: arm-ebsa110_defconfig (attached as .config)
> compiler: arm-linux-gnueabi-gcc (Debian 7.2.0-11) 7.2.0
> reproduce:
> wget
> https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross
> -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # save the attached .config to linux build tree
> GCC_VERSION=7.2.0 make.cross ARCH=arm
>
> All errors (new ones prefixed by >>):
>
> /tmp/ccfKN3IW.s: Assembler messages:
> /tmp/ccfKN3IW.s:26: Error: bad instruction `sbcscc r1,r1,r3'
>>> /tmp/ccfKN3IW.s:94: Error: bad instruction `sbcscc r8,r8,r0'
> /tmp/ccfKN3IW.s:104: Error: bad instruction `sbcscc r0,r0,r2'
> /tmp/ccfKN3IW.s:155: Error: bad instruction `sbcscc lr,lr,r2'
> /tmp/ccfKN3IW.s:630: Error: bad instruction `sbcscc r1,r1,r2'

Hm, it seems that gcc always assumes inline assembly is in non-unified
syntax when compiling using -marm:

.syntax divided
@ 244 "arch/arm/kernel/signal.c" 1
adds ip, r1, #760; sbcscc ip, ip, r3; movcc r3, #0
@ 0 "" 2

It seems that gcc would have an option to force unified syntax when
generating code for ARM state (-marm) using -masm-syntax-unified.
However, unfortunately, this seems currently broken. I created a bug in
the gcc bug tracker:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88648

The only solution I found is using ".syntax unified" in inline assembly,
not pretty but seems to do the job... Will send a v2.

--
Stefan



> --
> /tmp/cc9oa73P.s: Assembler messages:
> /tmp/cc9oa73P.s:2036: Error: bad instruction `sbcscc r1,r1,r3'
> /tmp/cc9oa73P.s:3325: Error: bad instruction `sbcscc r3,r3,r0'
> /tmp/cc9oa73P.s:3724: Error: bad instruction `sbcscc r2,r2,r3'
> /tmp/cc9oa73P.s:4242: Error: bad instruction `sbcscc r1,r1,r3'
>>> /tmp/cc9oa73P.s:4304: Error: bad instruction `sbcscc r10,r10,r2'
> /tmp/cc9oa73P.s:4831: Error: bad instruction `sbcscc r1,r1,r3'
> /tmp/cc9oa73P.s:4973: Error: bad instruction `sbcscc r1,r1,r3'
> /tmp/cc9oa73P.s:5059: Error: bad instruction `sbcscc r0,r0,r2'
> /tmp/cc9oa73P.s:5076: Error: bad instruction `sbcscc r0,r0,r2'
> /tmp/cc9oa73P.s:5120: Error: bad instruction `sbcscc r1,r1,r3'
> --
> /tmp/ccnaC92i.s: Assembler messages:
>>> /tmp/ccnaC92i.s:133: Error: bad instruction `sbcscc r7,r7,r1'
> /tmp/ccnaC92i.s:225: Error: bad instruction `sbcscc r1,r1,r3'
> /tmp/ccnaC92i.s:631: Error: bad instruction `sbcscc ip,ip,r3'
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all Intel Corporation