From: Al Viro Recent as(1) doesn't think that . terminates a macro name, so getuser.l is _not_ treated as invoking getuser with .l as the first argument. arch/m68k/math-emu relies on old behaviour, so it gets a lot of undefined macros with more or less current binutils. Note that this behaviour remains in all recent versions and is unrelated to another binutils problems we used to have for a while (having (%a0)+ parsed as two arguments). This one is there to stay; it's an intentional and documented change. Patch works by having a macro with name that would be treated differently by new and old rules; if expanded, it adds definition for getuser.b, etc. via getuser. Old as(1) sees definition of gas_workaround with one argument redefinition of gas_workaround (with empty body and ignored argument) invocation of gas_workaround with .x as argument => expands to nothing New as(1) sees definition of gas_workaround.x definition of gas_workaround (independent from gas_workaround.x) invocation of gas_workaround.x => expands to definitions of getuser.l, etc. IOW, the trigger for workaround is precisely the behaviour we need to work around. Signed-off-by: Al Viro Cc: Roman Zippel Cc: Geert Uytterhoeven Signed-off-by: Andrew Morton --- include/asm-m68k/math-emu.h | 14 ++++++++++++++ 1 files changed, 14 insertions(+) diff -puN include/asm-m68k/math-emu.h~m68k-work-around-binutils-tokenizer-change include/asm-m68k/math-emu.h --- a/include/asm-m68k/math-emu.h~m68k-work-around-binutils-tokenizer-change +++ a/include/asm-m68k/math-emu.h @@ -226,6 +226,20 @@ extern unsigned int fp_debugprint; .previous .endm +/* work around binutils idiocy */ +.macro gas_workaround.x +.irp m b,w,l +.macro getuser.\m src,dest,label,addr + getuser .\m,"\src","\dest","\label","\addr" +.endm +.macro putuser.\m src,dest,label,addr + putuser .\m,"\src","\dest","\label","\addr" +.endm +.endr +.endm +.macro gas_workaround x=0 +.endm + gas_workaround.x .macro movestack nr,arg1,arg2,arg3,arg4,arg5 .if \nr _