<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Tue, Feb 23, 2016 at 4:47 AM Joerg Sonnenberger via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Tue, Feb 23, 2016 at 04:47:32AM +0000, Tim Shen wrote:<br>
> To make the fix least surprising, I can either do:<br>
> 1) Create PPCISD::THREAD_POINTER and Intrinsic::ppc_thread_pointer and do<br>
> similar things aarch64 does; or<br>
> 2) Don't create PPCISD::THREAD_POINTER, but directly calls<br>
> llvm.read_register intrinsic in ppc's getStackCookieLocation(). This is the<br>
> way that requires least change; or<br>
> 3) Create a generic ISD::GET_GLOBAL_TLS_ADDRESS and intrinsic<br>
> llvm.get_global_tls_address(), and lower them to target specific ISD. No<br>
> target specific intrinsic is needed. I was wrong about<br>
> ISD::GlobalTlsAddress, since it requires a GlobalValue object.<br>
<br>
(4) Create an intrinisinc for the SSP cookie itself and allow targets to use<br>
different lowering passed on factors like the OS.<br></blockquote><div><br></div><div>Yeah I think this is better. Thanks!</div><div><br></div><div>So suppose we have a intrinsic ssp_cookie, when SelectionDAG visits it, it calls target specific function getSspCookie(...):</div><div>    virtual SDNode getSspCookie(...) const;</div><div><br></div><div>Compared to returning a Value* to a function pass (lib/CodeGen/StackProtector.cpp), returning a SDNode requires less wrapping on backend (e.g. Intrinsic::aarch64_thread_pointer).</div></div></div>