Project Scope
Enable/optimize AddressSanitizer function on RISC-V architecture. The major work is to port AddressSanitizer to RISC-V architecture both in GCC and LLVM, both for RV32 and RV64, both from pure software and hardware-software co-design.
Components and Repos
The tool consists of a compiler instrumentation module which works as an LLVM pass and a run-time library which replaces the malloc function.
- For LLVM:
The instrumentation module is maintained in LLVM backend. (llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp)
The run-time libraries tailored for AddressSanitizer can be found in compiler-rt/lib/asan and compiler-rt/lib/sanitizer_common.
- For GCC:
The instrumentation module is maintained in GCC backend.
(gcc/asan.c; gcc/config/riscv/riscv.c)
There are no individually developed run-time libraries for gcc. All the codes in libsanitzier/asan are merged from compiler-rt/lib/asan. So is sanitizer_common.
Stakeholders and Partners
- RISE-T-Head
- External
- GCC and LLVM community
Measure of Success
Compare to ARM, RISC-V developer can get a fully functional and efficient AddressSanitizer tool to find the bug in the application. There are three milestones for the project.
- M1: Base functional(finish)
- M2: Fully functional with software solution(develop complete, upstreaming)
- M3: Fully functional with hardware extensions, more fast with new extension or new hardware feature.
Timeline
- Enable AddressSanitizer for RISCV64 in GCC and LLVM - before
- Enable Scudo for RISCV64 in LLVM on both clang side and compiler-rt side - Mar, 2023
- Enable AddressSanitizer for RISCV32 in GCC and LLVM. (develop completed, upstreaming)- depend on the timeline of 32bit linux kernel
- Enable RISCV memory tagging for Scudo, with the support of hardware extension. - 12/30/2023
- Enable RISCV stack tagging in LLVM, with the support of hardware extension. - 12/30/2023
RISE Requirements
- Push the definition/standard for 32bit ecosystem move forward(linux kernel, ABI)
Dependencies
- 32bit-linux kernel
- ABI for 32bit application
Status
Dependency | 32bit - Linux Kernel ABI for 32bit application( definition of TASK_UNMAPPED_BASE) | |
Development | COMPLETE | |
Development Timeline | N/A | |
Upstreaming | ONGOING | depend on the definition of TASK_UNMAPPED_BASE in ABI. |
Upstream version | N/A | |
Contacts | Yunhai Shang Joshua | shangyunhai@gmail.com |
Enable AddressSanitizer for RISCV32 in GCC and LLVM. (develop completed, upstreaming)- depend on the timeline of 32bit linux kernel
Enable Scudo for RISCV64 in LLVM on both clang side and compiler-rt side.