<html><head></head><body><div><br></div><div class="-x-evo-paragraph -x-evo-top-signature-spacer"><br></div><div>On Wed, 2018-02-07 at 00:26 +0000, Chandler Carruth wrote:</div><blockquote type="cite"><div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Tue, Feb 6, 2018 at 4:16 PM Chandler Carruth <<a href="mailto:chandlerc@google.com">chandlerc@google.com</a>> wrote:<br></div><blockquote type="cite"><div dir="ltr"><div class="gmail_quote"><div>On Tue, Feb 6, 2018 at 2:56 PM David Woodhouse <<a href="mailto:dwmw2@infradead.org" target="_blank">dwmw2@infradead.org</a>> wrote:<br></div><blockquote type="cite"><div><div>At this point, what we really want is for identical thunks to have identical names — just like we do for builtins and other stuff, to avoid having differences between clang and GCC which just end up seeming capricious and being hard to work around. Having matching command line options would be a bonus, but isn't imperative.<br></div></div><br></blockquote></div></div><div dir="ltr"><div class="gmail_quote"><div><br></div></div></div><div dir="ltr"><div class="gmail_quote"><div>After talking to several others (to make sure we don't have to do this whole thing yet again) we'll change the external thunk names to match what GCC is using. Hopefully this doesn't come back to bite us. =]</div></div></div><br></blockquote><div><br></div><div>What name do we use for when the target address is pushed onto the stack? What are the semantics? Is there a spec anywheere?</div><div><br></div><div>LLVM only needs this on 32-bit x86, but we do kind of need an answer before we update all of our branches with new names....</div></div></div>
</blockquote><div><br></div><div>That would be __x86_indirect_thunk but the kernel doesn't use it. We use -mindirect-branch-register and only ever expect the compiler to use the register versions which are CET-compatible.</div><div><br></div><div>However, in at least one case in the 32-bit kernel we do emit the old ret-equivalent retpoline inline, because there literally wasn't a single register we could use (yay x86).</div><div><br></div><div>I would definitely consider ditching our use of -mindirect-thunk-register with GCC for 32-bit and exporting the __x86_indirect_thunk, to be consistent if that's what clang wants to do.</div><div><br></div><div><br></div></body></html>