mirror of git://git.musl-libc.org/musl
mark arm thread-pointer-loading inline asm as volatile
this builds on commitsa603a75a72
and0ba35d69c0
to ensure that a compiler cannot conclude that it's valid to reorder the asm to a point before the thread pointer is set up, or to treat the inline function as if it were declared with attribute((const)). other archs already use volatile asm for thread pointer loading.
This commit is contained in:
parent
11da520c7a
commit
74483c5955
|
@ -4,7 +4,7 @@
|
|||
static inline pthread_t __pthread_self()
|
||||
{
|
||||
char *p;
|
||||
__asm__( "mrc p15,0,%0,c13,c0,3" : "=r"(p) );
|
||||
__asm__ __volatile__ ( "mrc p15,0,%0,c13,c0,3" : "=r"(p) );
|
||||
return (void *)(p+8-sizeof(struct pthread));
|
||||
}
|
||||
|
||||
|
@ -14,10 +14,10 @@ static inline pthread_t __pthread_self()
|
|||
{
|
||||
#ifdef __clang__
|
||||
char *p;
|
||||
__asm__( "bl __a_gettp\n\tmov %0,r0" : "=r"(p) : : "cc", "r0", "lr" );
|
||||
__asm__ __volatile__ ( "bl __a_gettp\n\tmov %0,r0" : "=r"(p) : : "cc", "r0", "lr" );
|
||||
#else
|
||||
register char *p __asm__("r0");
|
||||
__asm__( "bl __a_gettp" : "=r"(p) : : "cc", "lr" );
|
||||
__asm__ __volatile__ ( "bl __a_gettp" : "=r"(p) : : "cc", "lr" );
|
||||
#endif
|
||||
return (void *)(p+8-sizeof(struct pthread));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue