mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-16 19:56:38 +00:00
[sanitizer] Add the settings of Read and Write flags in SignalContext for LoongArch
The bit-30 in this `__flags` means the address error is due to memory load, and the bit-31 means the address error is due to memory store. (see SC_ADDRERR_RD and SC_ADDRERR_WR in kernel arch/loongarch/include/uapi/asm/sigcontext.h). `illegal_write_test.cpp` and `illegal_read_test.cpp` have been tested and passed. Reviewed By: SixWeining, xen0n, XiaodongLoong Differential Revision: https://reviews.llvm.org/D137231
This commit is contained in:
parent
eae8d93dc2
commit
14cd113e69
@ -1956,6 +1956,13 @@ SignalContext::WriteFlag SignalContext::GetWriteFlag() const {
|
||||
u64 esr;
|
||||
if (!Aarch64GetESR(ucontext, &esr)) return Unknown;
|
||||
return esr & ESR_ELx_WNR ? Write : Read;
|
||||
#elif defined(__loongarch__)
|
||||
u32 flags = ucontext->uc_mcontext.__flags;
|
||||
if (flags & SC_ADDRERR_RD)
|
||||
return SignalContext::Read;
|
||||
if (flags & SC_ADDRERR_WR)
|
||||
return SignalContext::Write;
|
||||
return SignalContext::Unknown;
|
||||
#elif defined(__sparc__)
|
||||
// Decode the instruction to determine the access type.
|
||||
// From OpenSolaris $SRC/uts/sun4/os/trap.c (get_accesstype).
|
||||
|
Loading…
x
Reference in New Issue
Block a user