29 lines
635 B
C
29 lines
635 B
C
|
#ifndef ACCEL_TCG_USER_RETADDR_H
|
||
|
#define ACCEL_TCG_USER_RETADDR_H
|
||
|
|
||
|
#include "qemu/atomic.h"
|
||
|
|
||
|
extern __thread uintptr_t helper_retaddr;
|
||
|
|
||
|
static inline void set_helper_retaddr(uintptr_t ra)
|
||
|
{
|
||
|
helper_retaddr = ra;
|
||
|
/*
|
||
|
* Ensure that this write is visible to the SIGSEGV handler that
|
||
|
* may be invoked due to a subsequent invalid memory operation.
|
||
|
*/
|
||
|
signal_barrier();
|
||
|
}
|
||
|
|
||
|
static inline void clear_helper_retaddr(void)
|
||
|
{
|
||
|
/*
|
||
|
* Ensure that previous memory operations have succeeded before
|
||
|
* removing the data visible to the signal handler.
|
||
|
*/
|
||
|
signal_barrier();
|
||
|
helper_retaddr = 0;
|
||
|
}
|
||
|
|
||
|
#endif
|