On 9/5/19 1:12 PM, Richard Henderson wrote:
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?
No, it was an Armv8.0-A system without LSE.
If you need help with testing I'd be happy to help!
Kyrill
r~