<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Thu, Jun 28, 2018 at 5:36 PM Lang Hames <<a href="mailto:lhames@gmail.com">lhames@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Looks like this got re-reverted as it is breaking LLDB too. I would like to understand it better since we typically rely on Large/PIC for the code model in the JIT, and it has worked historically.</div></blockquote><div><br></div><div>Well, before my change, large+pic wouldn't actually generate PIC code, the code would contain hard-coded 64-bit immediate addresses. If we want to store to a global, we'd generate code like:</div><div>  movabsq $global, %rax</div><div>  movl $42, (%rax)</div><div><br></div><div>So, we were really generating large+static code. Large+PIC basically wasn't implemented.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">I restricted the MCJIT/eh-lg-pic.ll test to Linux, since the large PIC code model is not implemented for MachO yet.</blockquote><div><br></div><div>What is the source for that claim? I thought the behavior of a relocation model/code-model pair was up to the platform to decide (though in practice if it's not well defined on MachO yet we may want to match Linux's behavior).</div></div></div></blockquote><div><br></div><div>When I landed my change the first time, the Mac bots complained that RuntimeDyldMachO didn't implement some relocations. I had to implement relocations in RuntimeDyldELF to make this configuration work, but I didn't do anything for MachO. It still needs to be implemented.</div><div><br></div><div>Why does LLDB want MCJIT to generate PIC code? Does it plan to relocate it? Would it be possible to remove the call to EngineBuilder::setRelocationModel and let LLVM decide on the correct models for JITing based on the object file format?</div></div></div>