Messages in this thread | | | From | Andrew Cooper <> | Subject | Re: 5.19-rc1 x86 build failure | Date | Tue, 7 Jun 2022 12:42:33 +0000 |
| |
On 07/06/2022 13:19, Joe Damato wrote: > Greetings: > > My apologies if this is the incorrect place to report this, but I got a > build error when trying to compile the net-next 5.19-rc1 tree. > > git bisect says that commit a1e2c031ec394 ("x86/mm: Simplify > RESERVE_BRK()") is responsible for the build issue I am hitting. > > I am performing this build on an x86_64 system with GNU C11 (Ubuntu > 5.4.0-6ubuntu1~16.04.12) version 5.4.0 20160609 (x86_64-linux-gnu). > > The assembler outputs a cryptic error message: > > /tmp/ccnGOKZ5.s: Assembler messages: > /tmp/ccnGOKZ5.s:98: Error: missing ')' > /tmp/ccnGOKZ5.s:98: Error: missing ')' > /tmp/ccnGOKZ5.s:98: Error: missing ')' > /tmp/ccnGOKZ5.s:98: Error: junk at end of line, first unrecognized > character is `U' > /tmp/ccnGOKZ5.s:99: Error: missing ')' > /tmp/ccnGOKZ5.s:99: Error: missing ')' > /tmp/ccnGOKZ5.s:99: Error: missing ')' > /tmp/ccnGOKZ5.s:99: Error: junk at end of line, first unrecognized > character is `U' > > I've asked GCC to generate the assembly and output so I can see more > specifically where this issue is (via "-fverbose-asm -Wa,-adhln=output"): > > 96 .pushsection .brk_reservation,"aw",@nobits > 97 .brk.early_pgt_alloc: > 98 ???? 00000000 .skip ((2 * 3) * ((1UL) << 12)) > **** Error: missing ')' > **** Error: missing ')' > **** Error: missing ')' > **** Error: junk at end of line, first unrecognized character is `U' > 98 0000 > 100 .popsection > > This comes from arch/x86/mm/init.c, which has the following code: > > RESERVE_BRK(early_pgt_alloc, INIT_PGT_BUF_SIZE); > > wherein INIT_PGT_BUF_SIZE (via PAGE_SIZE) has a "1UL" which makes the > assembler unhappy. > > I don't really know what the correct way to fix this is; it seems that the > macro _AC should handle this if ASSEMBLY is defined, IIUC, but that does > not seem to be the case at this point in init.c. > > Perhaps I am doing something incorrect during the build process causing > this to happen?
The problem is that _AC() is evaluated in C context (so gains the UL/ULL suffix), and the C'd string is fed directly into the assembler (where older binutils doesn't tolerate the suffix).
Short of having a _PAGE_SIZE which is an explicitly non-AC()'d constant, I'm not sure what to suggest. Ideally, you'd want to temporarily define __ASSEMBLY__ around the expansion of __stringify(), but I don't think that's possible as RESERVE_BRK() is a macro itself.
~Andrew
| |