[PATCH] D106128: [lld-macho] Use immediate encodings for bind opcodes

Vincent Lee via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 15 22:50:12 PDT 2021


thevinster marked an inline comment as not done.
thevinster added inline comments.


================
Comment at: lld/MachO/SyntheticSections.cpp:368
+    if ((p->opcode == BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB)
+          && (p->data < (15*sizeof(uint64_t)))
+          && ((p->data % sizeof(uint64_t)) == 0)) {
----------------
int3 wrote:
> thevinster wrote:
> > int3 wrote:
> > > thevinster wrote:
> > > > I believe `ld64` switches off the type based on whether it operates on a 32-bit or a 64-bit. I didn't get a chance to verify it because LLD doesn't seem to support `i386` (https://github.com/llvm/llvm-project/blob/main/lld/MachO/Driver.cpp#L700-L711). 
> > > can we have a comment explaining how `BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED` works, and where the 15 and `sizeof(uint64_t)` is coming from?
> > That was quick! Will add a comment about the `15`. As far as the `sizeof(uint64_t)`, I wrote a comment above describing that situation. 
> I'm confused as to why LLD not supporting i386 matters for testing ld64's behavior. llvm-mc can emit i386 object files that we can pass to ld64...
I get the following error when trying to pass an i386 object file to LLD using x86_64 arch. `ld64.lld: error: /Users/leevince/local/llvm-project/build/Debug/tools/lld/test/MachO/Output/bind-opcodes.s.tmp/foo.o has architecture i386 which is incompatible with target architecture x86_64`. I'm unsure how to go about this without having to support i386. 


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D106128



More information about the llvm-commits mailing list