The R_AARCH64_ADR_PREL_PG_HI21 relocation type is given the R_PAGE_PC RelExpr. This can be transformed to R_PLT_PAGE_PC via toPlt(). Unfortunately the resolution is identical to R_PAGE_PC so instead of getting the address of the PLT entry we get the address of the symbol which may not be correct in the case of static ifuncs (See comments in D54314 and example in D54145). The fix is simple. Just use getPltVA() + A rather than getVA() to get the address of the PLT entry.
It looks like the only way that R_PLT_PAGE_PC will be generated from compiled code is via the address of an ifunc in the same executable with non-pic code. I thought that it might be possible to generate an example by taking the address of a function in a DSO but this does not go through the toPlt() route, it uses processRelocAux() // This handles a non PIC program call to function in a shared library.
The patch is rebased on top of D54314 and D54145, it is most likely independent of it, but makes sense to be committed afterwards.