Where Clang's AArch64 backend seems to differ from the X86 backend is
that it tends to use the GOT more aggressively.
After getting CloudABI PIEs working on x86-64, I noticed that accessing
global variables would still crash on aarch64. Tracing it down, it turns
out that the GOT was filled with entries assuming the base address was
zero.
It turns out that we skip generating relocations for GOT entries in case
the relocation pointing towards the GOT is relative. This is probably
wrong. Whether the thing pointing to the GOT is absolute or relative
shouldn't make any difference; the GOT entry itself should contain the
absolute address, thus needs a relocation regardless.
Before turning this into a full patch containing tests, I'm first
sending this out for review, because again I don't really know what I'm
doing. Is my interpretation on this matter correct?