mirror of
https://sourceware.org/git/glibc.git
synced 2025-12-24 17:51:17 +03:00
powerpc: Enforce compiler barriers on hardware transactions
Work around a GCC behavior with hardware transactional memory built-ins. GCC doesn't treat the PowerPC transactional built-ins as compiler barriers, moving instructions past the transaction boundaries and altering their atomicity.
This commit is contained in:
@@ -31,7 +31,7 @@ int
|
||||
__lll_trylock_elision (int *futex, short *adapt_count)
|
||||
{
|
||||
/* Implement POSIX semantics by forbiding nesting elided trylocks. */
|
||||
__builtin_tabort (_ABORT_NESTED_TRYLOCK);
|
||||
__libc_tabort (_ABORT_NESTED_TRYLOCK);
|
||||
|
||||
/* Only try a transaction if it's worth it. */
|
||||
if (*adapt_count > 0)
|
||||
@@ -39,14 +39,14 @@ __lll_trylock_elision (int *futex, short *adapt_count)
|
||||
goto use_lock;
|
||||
}
|
||||
|
||||
if (__builtin_tbegin (0))
|
||||
if (__libc_tbegin (0))
|
||||
{
|
||||
if (*futex == 0)
|
||||
return 0;
|
||||
|
||||
/* Lock was busy. This is never a nested transaction.
|
||||
End it, and set the adapt count. */
|
||||
__builtin_tend (0);
|
||||
__libc_tend (0);
|
||||
|
||||
if (aconf.skip_lock_busy > 0)
|
||||
*adapt_count = aconf.skip_lock_busy;
|
||||
|
||||
Reference in New Issue
Block a user