On Tue, Jan 17, 2023 at 6:52 AM Emanuele Giuseppe Esposito < [email protected]> wrote:
> QEMU does not compile when enabling clang's thread safety analysis > (TSA), > because some functions create wrappers for pthread mutexes but do > not use any TSA macro. Therefore the compiler fails. > > In order to make the compiler happy and avoid adding all the > necessary macros to all callers (lock functions should use > TSA_ACQUIRE, while unlock TSA_RELEASE, and this applies to allusers of > pthread_mutex_lock/pthread_mutex_unlock), > simply use TSA_NO_TSA to supppress such warnings. > I'm not sure I understand this quite right. Maybe a clarifying question will help me understand: Why is this needed for bsd-user but not linux-user? How are they different here? Warner > Signed-off-by: Emanuele Giuseppe Esposito <[email protected]> > --- > bsd-user/qemu.h | 5 +++-- > include/exec/exec-all.h | 5 +++-- > 2 files changed, 6 insertions(+), 4 deletions(-) > > diff --git a/bsd-user/qemu.h b/bsd-user/qemu.h > index be6105385e..711fdd1b64 100644 > --- a/bsd-user/qemu.h > +++ b/bsd-user/qemu.h > @@ -37,6 +37,7 @@ extern char **environ; > #include "target_os_signal.h" > #include "target.h" > #include "exec/gdbstub.h" > +#include "qemu/clang-tsa.h" > > /* > * This struct is used to hold certain information about the image. > Basically, > @@ -235,8 +236,8 @@ int target_msync(abi_ulong start, abi_ulong len, int > flags); > extern unsigned long last_brk; > extern abi_ulong mmap_next_start; > abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size); > -void mmap_fork_start(void); > -void mmap_fork_end(int child); > +void TSA_NO_TSA mmap_fork_start(void); > +void TSA_NO_TSA mmap_fork_end(int child); > > /* main.c */ > extern char qemu_proc_pathname[]; > diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h > index 25e11b0a8d..4f0c0559ac 100644 > --- a/include/exec/exec-all.h > +++ b/include/exec/exec-all.h > @@ -25,6 +25,7 @@ > #include "exec/cpu_ldst.h" > #endif > #include "qemu/interval-tree.h" > +#include "qemu/clang-tsa.h" > > /* allow to see translation results - the slowdown should be negligible, > so we leave it */ > #define DEBUG_DISAS > @@ -758,8 +759,8 @@ static inline tb_page_addr_t > get_page_addr_code(CPUArchState *env, > } > > #if defined(CONFIG_USER_ONLY) > -void mmap_lock(void); > -void mmap_unlock(void); > +void TSA_NO_TSA mmap_lock(void); > +void TSA_NO_TSA mmap_unlock(void); > bool have_mmap_lock(void); > > /** > -- > 2.39.0 > >
