[PATCH] D75382: [lld] Initial commit for new Mach-O backend

Peter Collingbourne via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 2 13:44:07 PST 2020


pcc added inline comments.


================
Comment at: lld/MachO/InputFiles.cpp:37
+// a Mach-O relocation has a bit indicating whether it refers a symbol or a
+// location within the same section. R_SCATTERED is that bit.
+//
----------------
int3 wrote:
> pcc wrote:
> > I don't believe that this is true in general. In the case where R_SCATTERED is false, bit 27 of r_word1 (the `extern` bit) indicates whether the relocation refers to a symbol or a section address. You can see this by grepping for `rExtern` in the existing lld, and seeing how relocations with/without the bit are handled (e.g. http://llvm-cs.pcc.me.uk/tools/lld/lib/ReaderWriter/MachO/ArchHandler_arm64.cpp#434 ).
> This was originally written by @ruiu, but I *think* what this means is that R_SCATTERED determines whether the relocation is referring to something within the same section, and not whether it's referring to a symbol or a section. I'll rephrase things...
I think that both non-R_SCATTERED and R_SCATTERED can refer to locations within different sections. You can see this in the implementation of "atomByAddr" in the old linker:
http://llvm-cs.pcc.me.uk/tools/lld/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp#527
which contains code to look up potentially different sections.

This function is called e.g. here:
http://llvm-cs.pcc.me.uk/tools/lld/lib/ReaderWriter/MachO/ArchHandler_arm64.cpp#444

and the "symbol" field (which becomes the first argument of that function) is filled in here:
http://llvm-cs.pcc.me.uk/tools/lld/lib/ReaderWriter/MachO/MachONormalizedFileBinaryUtils.h#144
(and code below to handle the non-R_SCATTERED case).

I would summarise the situation as being:
- non-scattered relocations may refer to either an external symbol or a location within a (same or different) section (index is specified in relocation, or inferred from address if 0)
- scattered relocations may only refer to a location within a (same or different) section (index is inferred from address).


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D75382





More information about the llvm-commits mailing list