riscv: actually enable sanitizers
1. Backport b475ce39e8
.
2. Enable libclang_rt for riscv.
Previous commit missed it.
MFC after: 3 days
Reviewed by: dim
Differential Revision: https://reviews.freebsd.org/D34543
This commit is contained in:
parent
bce40c0242
commit
3781e77995
@ -416,7 +416,7 @@ uptr internal_unlink(const char *path) {
|
||||
}
|
||||
|
||||
uptr internal_rename(const char *oldpath, const char *newpath) {
|
||||
#if defined(__riscv)
|
||||
#if defined(__riscv) && defined(__linux__)
|
||||
return internal_syscall(SYSCALL(renameat2), AT_FDCWD, (uptr)oldpath, AT_FDCWD,
|
||||
(uptr)newpath, 0);
|
||||
#elif SANITIZER_USES_CANONICAL_LINUX_SYSCALLS
|
||||
@ -1218,7 +1218,8 @@ void ForEachMappedRegion(link_map *map, void (*cb)(const void *, uptr)) {
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(__x86_64__) && SANITIZER_LINUX
|
||||
#if SANITIZER_LINUX
|
||||
#if defined(__x86_64__)
|
||||
// We cannot use glibc's clone wrapper, because it messes with the child
|
||||
// task's TLS. It writes the PID and TID of the child task to its thread
|
||||
// descriptor, but in our case the child task shares the thread descriptor with
|
||||
@ -1557,7 +1558,7 @@ uptr internal_clone(int (*fn)(void *), void *child_stack, int flags, void *arg,
|
||||
: "cr0", "cr1", "memory", "ctr", "r0", "r27", "r28", "r29");
|
||||
return res;
|
||||
}
|
||||
#elif defined(__i386__) && SANITIZER_LINUX
|
||||
#elif defined(__i386__)
|
||||
uptr internal_clone(int (*fn)(void *), void *child_stack, int flags, void *arg,
|
||||
int *parent_tidptr, void *newtls, int *child_tidptr) {
|
||||
int res;
|
||||
@ -1622,7 +1623,7 @@ uptr internal_clone(int (*fn)(void *), void *child_stack, int flags, void *arg,
|
||||
: "memory");
|
||||
return res;
|
||||
}
|
||||
#elif defined(__arm__) && SANITIZER_LINUX
|
||||
#elif defined(__arm__)
|
||||
uptr internal_clone(int (*fn)(void *), void *child_stack, int flags, void *arg,
|
||||
int *parent_tidptr, void *newtls, int *child_tidptr) {
|
||||
unsigned int res;
|
||||
@ -1688,7 +1689,8 @@ uptr internal_clone(int (*fn)(void *), void *child_stack, int flags, void *arg,
|
||||
: "memory");
|
||||
return res;
|
||||
}
|
||||
#endif // defined(__x86_64__) && SANITIZER_LINUX
|
||||
#endif
|
||||
#endif // SANITIZER_LINUX
|
||||
|
||||
#if SANITIZER_LINUX
|
||||
int internal_uname(struct utsname *buf) {
|
||||
@ -1918,7 +1920,11 @@ SignalContext::WriteFlag SignalContext::GetWriteFlag() const {
|
||||
u32 instr = *(u32 *)pc;
|
||||
return (instr >> 21) & 1 ? WRITE: READ;
|
||||
#elif defined(__riscv)
|
||||
#if SANITIZER_FREEBSD
|
||||
unsigned long pc = ucontext->uc_mcontext.mc_gpregs.gp_sepc;
|
||||
#else
|
||||
unsigned long pc = ucontext->uc_mcontext.__gregs[REG_PC];
|
||||
#endif
|
||||
unsigned faulty_instruction = *(uint16_t *)pc;
|
||||
|
||||
#if defined(__riscv_compressed)
|
||||
@ -2137,9 +2143,15 @@ static void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp) {
|
||||
*sp = ucontext->uc_mcontext.gregs[15];
|
||||
#elif defined(__riscv)
|
||||
ucontext_t *ucontext = (ucontext_t*)context;
|
||||
# if SANITIZER_FREEBSD
|
||||
*pc = ucontext->uc_mcontext.mc_gpregs.gp_sepc;
|
||||
*bp = ucontext->uc_mcontext.mc_gpregs.gp_s[0];
|
||||
*sp = ucontext->uc_mcontext.mc_gpregs.gp_sp;
|
||||
# else
|
||||
*pc = ucontext->uc_mcontext.__gregs[REG_PC];
|
||||
*bp = ucontext->uc_mcontext.__gregs[REG_S0];
|
||||
*sp = ucontext->uc_mcontext.__gregs[REG_SP];
|
||||
# endif
|
||||
#else
|
||||
# error "Unsupported arch"
|
||||
#endif
|
||||
|
@ -184,7 +184,7 @@ SUBDIR.${MK_STATS}+= libstats
|
||||
.if ${COMPILER_TYPE} == "clang" && ${MK_CXX} != "no" && \
|
||||
(${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "amd64" || \
|
||||
${MACHINE_CPUARCH} == "arm" || ${MACHINE_CPUARCH} == "i386" || \
|
||||
${MACHINE_CPUARCH} == "powerpc")
|
||||
${MACHINE_CPUARCH} == "powerpc" || ${MACHINE_CPUARCH} == "riscv")
|
||||
_libclang_rt= libclang_rt
|
||||
.elif (${MK_ASAN} != "no" || ${MK_UBSAN} != "no") && make(all)
|
||||
.error Requested build with sanitizers but cannot build runtime libraries!
|
||||
|
Loading…
Reference in New Issue
Block a user