svn commit: r354263 - stable/12/lib/libthr/arch/riscv/include
Mitchell Horne
mhorne at FreeBSD.org
Sat Nov 2 19:52:23 UTC 2019
Author: mhorne
Date: Sat Nov 2 19:52:22 2019
New Revision: 354263
URL: https://svnweb.freebsd.org/changeset/base/354263
Log:
MFC r353334:
RISC-V: Fix an alignment warning in libthr
Compiling with clang gives a loss-of-alignment error due the cast to
uint8_t *. Since the TLS is always tcb aligned and TP_OFFSET is defined
as sizeof(struct tcb) we can guarantee there is no misalignment. Silence
the error by moving the offset into the inline assembly.
Reviewed by: br
Differential Revision: https://reviews.freebsd.org/D21926
Modified:
stable/12/lib/libthr/arch/riscv/include/pthread_md.h
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/lib/libthr/arch/riscv/include/pthread_md.h
==============================================================================
--- stable/12/lib/libthr/arch/riscv/include/pthread_md.h Sat Nov 2 19:50:36 2019 (r354262)
+++ stable/12/lib/libthr/arch/riscv/include/pthread_md.h Sat Nov 2 19:52:22 2019 (r354263)
@@ -62,7 +62,7 @@ static __inline void
_tcb_set(struct tcb *tcb)
{
- __asm __volatile("mv tp, %0" :: "r"((uint8_t *)tcb + TP_OFFSET));
+ __asm __volatile("addi tp, %0, %1" :: "r"(tcb), "I"(TP_OFFSET));
}
/*
@@ -71,11 +71,11 @@ _tcb_set(struct tcb *tcb)
static __inline struct tcb *
_tcb_get(void)
{
- register uint8_t *_tp;
+ struct tcb *_tcb;
- __asm __volatile("mv %0, tp" : "=r"(_tp));
+ __asm __volatile("addi %0, tp, %1" : "=r"(_tcb) : "I"(-TP_OFFSET));
- return ((struct tcb *)(_tp - TP_OFFSET));
+ return (_tcb);
}
static __inline struct pthread *
More information about the svn-src-stable-12
mailing list