On 9/5/19 3:00 AM, Kyrill Tkachov wrote: >> +/* Define the symbol gating the LSE implementations. */ >> +extern _Bool __aa64_have_atomics >> + __attribute__((visibility("hidden"), nocommon)); >> + > > Bootstrapping this patch series on an Armv8-A system with OOL atomics enabled > by default gave me link errors > > when building libgomp about __aa64_have_atomics being undefined. > > I haven't followed the series from the start so maybe I'm missing some things, > but I don't see where this variable is supposed to "live"?
Removing the extern here is the correct fix. Obviously the v3 patch set conversion from C to assembly wasn't properly tested, or I made some last-minute changes before posting. Time has erased that memory. > Removing the 'extern' from here allows the bootstrap to proceed but it fails > at > a later stage with bizzare errors like: > > In file included from build/gencondmd.c:51: > $SRC/gcc/config/aarch64/constraints.md: In function ‘bool > satisfies_constraint_S(rtx)’: > $SRC/gcc/config/aarch64/constraints.md:120:10: error: ‘C’ was not declared in > this scope; did you mean ‘PC’? > 120 | (define_constraint "Y" > | ^ > | PC > > which looks like a miscompilation of sorts. I noticed a couple of typos in the assembly that used the wrong register form (wN vs xN) on the LSE instructions. By chance were you testing on a system with LSE instructions enabled? r~