[PATCH] D112063: [lld][ELF] Add first bits to support relocation relaxations for AArch64

Alexander Shaposhnikov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 28 15:07:34 PDT 2021


alexander-shaposhnikov added inline comments.


================
Comment at: lld/ELF/Arch/AArch64.cpp:578
+  // always appear in pairs.
+  for (size_t i = 0, size = relocs.size(); i + 1 < size; ++i) {
+    if (relocs[i].type == R_AARCH64_LD64_GOT_LO12_NC) {
----------------
alexander-shaposhnikov wrote:
> MaskRay wrote:
> > `i + 1 < size` has a bug that the last relocation is not checked.
> > 
> > If `i` is moved outside the loop one single `safeToRelaxAdrpLdr = i == size;` can be used.
> > 
> > That said, the same check has been repeated in `tryRelaxAdrpLdr`. Maybe `AArch64Relaxer` is not needed.
> that was intentional (potentially not checking the last relocation), but to be rigorous we can do that.
as Wilco pointed out, for the extra safety we check if these relocations show up in pairs (R_AARCH64_ADR_GOT_PAGE and R_AARCH64_LD64_GOT_LO12_NC), this needs to happen in advance before any changes/writes happen.
Rather than keeping the state in boolean variables / exposing these details / complexity to higher level code it seems to be better to encapsulate this logic.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112063/new/

https://reviews.llvm.org/D112063



More information about the llvm-commits mailing list