[PATCH] D75382: [lld] Initial commit for new Mach-O backend
Jez Ng via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 3 08:53:00 PST 2020
int3 marked an inline comment as done.
int3 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.
+//
----------------
pcc wrote:
> 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).
Thanks for the pointers! That makes sense. One question:
> section (index is specified in relocation, or inferred from address if 0)
Can a valid relocation actually have 0 as the section index? `Relocation::value` for a non-scattered relocation is always zero, so I'm not sure what address we could infer things from...
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