Re: {standard input}:136: Error: number (0x9000000080000000) larger than 32 bits

From: Maciej W. Rozycki
Date: Mon Apr 18 2016 - 10:26:13 EST


On Mon, 18 Apr 2016, Ralf Baechle wrote:

> The old case btw, affects ip22 with a random_config:
>
> CC arch/mips/mm/sc-ip22.o
> {standard input}: Assembler messages:
> {standard input}:137: Error: number (0x9000000080000000) larger than 32 bits
> {standard input}:162: Error: number (0x9000000080000000) larger than 32 bits
> scripts/Makefile.build:258: recipe for target 'arch/mips/mm/sc-ip22.o' failed
> make[2]: *** [arch/mips/mm/sc-ip22.o] Error 1
> scripts/Makefile.build:403: recipe for target 'arch/mips/mm' failed
> make[1]: *** [arch/mips/mm] Error 2
> Makefile:947: recipe for target 'arch/mips' failed
> make: *** [arch/mips] Error 2
>
> and I was able to reproduce it with binutils 2.26 and commit
> c517d838eb7d07bbe9507871fab3931deccff539 ("Linux 4.0-rc1"). The code
> in question looks like:
>
> static inline void indy_sc_wipe(unsigned long first, unsigned long last)
> {
> unsigned long tmp;
>
> __asm__ __volatile__(
> ".set\tpush\t\t\t# indy_sc_wipe\n\t"
> ".set\tnoreorder\n\t"
> ".set\tmips3\n\t"
> ".set\tnoat\n\t"
> "mfc0\t%2, $12\n\t"
> "li\t$1, 0x80\t\t\t# Go 64 bit\n\t"
> "mtc0\t$1, $12\n\t"
>
> "dli\t$1, 0x9000000080000000\n\t"

That does not help me, I'm afraid, I can't trigger the issue with this
piece of code alone. It may be caused by a particular combination of GAS
command line options and `.set' directives.

Since you can reproduce it, can you please send me the offending .s file
(`make arch/mips/mm/sc-ip22.s') and the GAS invocation line used? GCC
will print the latter along all kinds of diagnostic stuff if -v is passed
to an invocation involving assembly (e.g. `make V=1 CFLAGS_sc-ip22.o=-v
arch/mips/mm/sc-ip22.o'). You can send me the whole diagnostics, I'll
filter what I need.

I think it'll be the most efficient way to move forward; otherwise I may
keep missing the issue.

Thanks,

Maciej