<div dir="ltr"><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">Hello there,</span></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><br></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">We want to publish the port of HWASAN implementation for RISCV to llvm. And I'd like to understand the prerequisites for this functionality to be adopted by llvm</span></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><br></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">The implementation is dependent on the </span><a style="background:transparent;margin-top:0pt;margin-bottom:0pt;color:rgb(74,110,224)" target="_blank" href="https://github.com/riscv/riscv-j-extension" class="editor-rtfLink"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">J-extension</span></a><span style="background:transparent;margin-top:0pt;margin-bottom:0pt"> (aka "Pointer Masking") to be available. At the present moment, the extension is not an official one, but the core concepts which are relevant to llvm are not expected to be changed. </span><span style="background-color:transparent">Currently, we are pushing the implementation of this extension to qemu. There is a set of patches on <a href="https://lists.nongnu.org/archive/html/qemu-riscv/2020-10/msg00173.html">review</a>.</span></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><br></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">We already have an initial prototype of the HWASAN port for RISC-V based on this extension. And we'd like to push it to llvm mainline. I'd like to understand the prerequisites of such functionality to be adopted.</span></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><br></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">1. Is the availability of J-extension in qemu enough?</span></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">2. As is - the extension can be used in bare-metal applications right away. However, Linux may require some patches: for example, implementation of syscalls to enable Pointer Masking for the calling process (by the way - we have the initial implementation for that too).</span></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><br></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">Could someone advise if we can begin to roll-out the relevant patches for such an experimental functionality? Or should we wait for, say, an "official" Linux support?</span></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><br></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">Any suggestions and recommendations are very welcome. </span></p></div>