Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 13 Mar 2022 17:59:33 -0700
From:      Ravi Pokala <rpokala@freebsd.org>
To:        Piotr Kubaj <pkubaj@anongoth.pl>
Cc:        "src-committers@FreeBSD.org" <src-committers@freebsd.org>, "dev-commits-src-all@FreeBSD.org" <dev-commits-src-all@freebsd.org>, "dev-commits-src-main@FreeBSD.org" <dev-commits-src-main@freebsd.org>
Subject:   Re: 3781e77995e9 - main - riscv: actually enable sanitizers
Message-ID:  <B68AB36A-C8D7-4B2C-94E2-5FBCA3BC4888@panasas.com>
In-Reply-To: <Yi5ylmbzvvLmqqie@KGPE-D16>
References:  <202203131207.22DC7dTY000316@gitrepo.freebsd.org> <67FE3738-E963-4EBF-B01F-ECEA897CB154@panasas.com> <Yi5ylmbzvvLmqqie@KGPE-D16>

next in thread | previous in thread | raw e-mail | index | archive | help
-----Original Message-----
From: Piotr Kubaj <pkubaj@anongoth.pl>
Date: 2022-03-13, Sunday at 15:39
To: Ravi Pokala <rpokala@panasas.com>
Cc: "src-committers@FreeBSD.org" <src-committers@freebsd.org>, "dev-commits=
-src-all@FreeBSD.org" <dev-commits-src-all@freebsd.org>, "dev-commits-src-ma=
in@FreeBSD.org" <dev-commits-src-main@freebsd.org>
Subject: Re: 3781e77995e9 - main - riscv: actually enable sanitizers

    On 22-03-13 21:29:19, Pokala, Ravi wrote:
    > Hi Piotr,
    >=20
    > > --- a/lib/Makefile
    > > +++ b/lib/Makefile
    > > @@ -184,7 +184,7 @@ SUBDIR.${MK_STATS}+=3D	libstats
    > > .if ${COMPILER_TYPE} =3D=3D "clang" && ${MK_CXX} !=3D "no" && \
    > >      (${MACHINE_CPUARCH} =3D=3D "aarch64" || ${MACHINE_CPUARCH} =3D=3D "amd=
64" || \
    > >      ${MACHINE_CPUARCH} =3D=3D "arm" || ${MACHINE_CPUARCH} =3D=3D "i386" ||=
 \
    > > -    ${MACHINE_CPUARCH} =3D=3D "powerpc")
    > > +    ${MACHINE_CPUARCH} =3D=3D "powerpc" || ${MACHINE_CPUARCH} =3D=3D "risc=
v")
    > > _libclang_rt=3D	libclang_rt
    > > .elif (${MK_ASAN} !=3D "no" || ${MK_UBSAN} !=3D "no") && make(all)
    > > .error Requested build with sanitizers but cannot build runtime lib=
raries!
    >=20
    > I believe the conditional now covers all architectures. Couldn't / sh=
ouldn't it simply be removed?
    It can, but I left it as it is for MFC'ing purposes.

    13 still supports mips.

Good point. Perhaps some post-MFC cleanup then.

Thanks,

Ravi (rpokala@)

    >=20
    > Thanks,
    >=20
    > Ravi (rpokala@)
    >=20
    > =EF=BB=BF-----Original Message-----
    > From: <owner-src-committers@freebsd.org> on behalf of Piotr Kubaj <pk=
ubaj@FreeBSD.org>
    > Date: 2022-03-13, Sunday at 05:07
    > To: <src-committers@FreeBSD.org>, <dev-commits-src-all@FreeBSD.org>, =
<dev-commits-src-main@FreeBSD.org>
    > Subject: git: 3781e77995e9 - main - riscv: actually enable sanitizers
    >=20
    >     The branch main has been updated by pkubaj (ports committer):
    >=20
    >     URL: https://cgit.FreeBSD.org/src/commit/?id=3D3781e77995e9b81afcbf=
7b3dc84b33b864c48794
    >=20
    >     commit 3781e77995e9b81afcbf7b3dc84b33b864c48794
    >     Author:     Piotr Kubaj <pkubaj@FreeBSD.org>
    >     AuthorDate: 2022-03-13 03:31:35 +0000
    >     Commit:     Piotr Kubaj <pkubaj@FreeBSD.org>
    >     CommitDate: 2022-03-13 12:06:57 +0000
    >=20
    >         riscv: actually enable sanitizers
    >=20
    >         1. Backport https://github.com/llvm/llvm-project/commit/b475c=
e39e8b1de3a70ea242473f136a567be46e3.
    >         2. Enable libclang_rt for riscv.
    >=20
    >         Previous commit missed it.
    >=20
    >         MFC after:      3 days
    >         Reviewed by:    dim
    >         Differential Revision: https://reviews.freebsd.org/D34543
    >     ---
    >      .../lib/sanitizer_common/sanitizer_linux.cpp       | 22 ++++++++=
+++++++++-----
    >      lib/Makefile                                       |  2 +-
    >      2 files changed, 18 insertions(+), 6 deletions(-)
    >=20
    >     diff --git a/contrib/llvm-project/compiler-rt/lib/sanitizer_commo=
n/sanitizer_linux.cpp b/contrib/llvm-project/compiler-rt/lib/sanitizer_commo=
n/sanitizer_linux.cpp
    >     index daa07c15490e..769e8029dfcb 100644
    >     --- a/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanit=
izer_linux.cpp
    >     +++ b/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanit=
izer_linux.cpp
    >     @@ -416,7 +416,7 @@ uptr internal_unlink(const char *path) {
    >      }
    >=20
    >      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)ol=
dpath, AT_FDCWD,
    >                                (uptr)newpath, 0);
    >      #elif SANITIZER_USES_CANONICAL_LINUX_SYSCALLS
    >     @@ -1218,7 +1218,8 @@ void ForEachMappedRegion(link_map *map, voi=
d (*cb)(const void *, uptr)) {
    >      }
    >      #endif
    >=20
    >     -#if defined(__x86_64__) && SANITIZER_LINUX
    >     +#if SANITIZER_LINUX
    >     +#if defined(__x86_64__)
    >      // We cannot use glibc's clone wrapper, because it messes with t=
he child
    >      // task's TLS. It writes the PID and TID of the child task to it=
s 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 fl=
ags, 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 fl=
ags, 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
    >=20
    >      #if SANITIZER_LINUX
    >      int internal_uname(struct utsname *buf) {
    >     @@ -1918,7 +1920,11 @@ SignalContext::WriteFlag SignalContext::Ge=
tWriteFlag() const {
    >        u32 instr =3D *(u32 *)pc;
    >        return (instr >> 21) & 1 ? WRITE: READ;
    >      #elif defined(__riscv)
    >     +#if SANITIZER_FREEBSD
    >     +  unsigned long pc =3D ucontext->uc_mcontext.mc_gpregs.gp_sepc;
    >     +#else
    >        unsigned long pc =3D ucontext->uc_mcontext.__gregs[REG_PC];
    >     +#endif
    >        unsigned faulty_instruction =3D *(uint16_t *)pc;
    >=20
    >      #if defined(__riscv_compressed)
    >     @@ -2137,9 +2143,15 @@ static void GetPcSpBp(void *context, uptr =
*pc, uptr *sp, uptr *bp) {
    >        *sp =3D ucontext->uc_mcontext.gregs[15];
    >      #elif defined(__riscv)
    >        ucontext_t *ucontext =3D (ucontext_t*)context;
    >     +#    if SANITIZER_FREEBSD
    >     +  *pc =3D ucontext->uc_mcontext.mc_gpregs.gp_sepc;
    >     +  *bp =3D ucontext->uc_mcontext.mc_gpregs.gp_s[0];
    >     +  *sp =3D ucontext->uc_mcontext.mc_gpregs.gp_sp;
    >     +#    else
    >        *pc =3D ucontext->uc_mcontext.__gregs[REG_PC];
    >        *bp =3D ucontext->uc_mcontext.__gregs[REG_S0];
    >        *sp =3D ucontext->uc_mcontext.__gregs[REG_SP];
    >     +#    endif
    >      #else
    >      # error "Unsupported arch"
    >      #endif
    >     diff --git a/lib/Makefile b/lib/Makefile
    >     index d34f40616396..816374552f0a 100644
    >     --- a/lib/Makefile
    >     +++ b/lib/Makefile
    >     @@ -184,7 +184,7 @@ SUBDIR.${MK_STATS}+=3D	libstats
    >      .if ${COMPILER_TYPE} =3D=3D "clang" && ${MK_CXX} !=3D "no" && \
    >          (${MACHINE_CPUARCH} =3D=3D "aarch64" || ${MACHINE_CPUARCH} =3D=3D "a=
md64" || \
    >          ${MACHINE_CPUARCH} =3D=3D "arm" || ${MACHINE_CPUARCH} =3D=3D "i386" =
|| \
    >     -    ${MACHINE_CPUARCH} =3D=3D "powerpc")
    >     +    ${MACHINE_CPUARCH} =3D=3D "powerpc" || ${MACHINE_CPUARCH} =3D=3D "ri=
scv")
    >      _libclang_rt=3D	libclang_rt
    >      .elif (${MK_ASAN} !=3D "no" || ${MK_UBSAN} !=3D "no") && make(all)
    >      .error Requested build with sanitizers but cannot build runtime =
libraries!
    >=20





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B68AB36A-C8D7-4B2C-94E2-5FBCA3BC4888>