@@ -1417,7 +1417,7 @@ extern "C" void __env_unlock(struct _reent *_r)
1417
1417
1418
1418
#endif
1419
1419
1420
- #if defined (__GNUC__) || defined(__CC_ARM) || (defined ( __ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) )
1420
+ #if defined (__GNUC__) || defined ( __ARMCC_VERSION)
1421
1421
1422
1422
#define CXA_GUARD_INIT_DONE (1 << 0 )
1423
1423
#define CXA_GUARD_INIT_IN_PROGRESS (1 << 1 )
@@ -1426,38 +1426,41 @@ extern "C" void __env_unlock(struct _reent *_r)
1426
1426
extern " C" int __cxa_guard_acquire (int *guard_object_p)
1427
1427
{
1428
1428
uint8_t *guard_object = (uint8_t *)guard_object_p;
1429
- if (CXA_GUARD_INIT_DONE == (* guard_object & CXA_GUARD_MASK)) {
1429
+ if (( core_util_atomic_load_u8 ( guard_object) & CXA_GUARD_MASK) == CXA_GUARD_INIT_DONE ) {
1430
1430
return 0 ;
1431
1431
}
1432
1432
singleton_lock ();
1433
- if (CXA_GUARD_INIT_DONE == (*guard_object & CXA_GUARD_MASK)) {
1433
+ uint8_t guard = *guard_object;
1434
+ if ((guard & CXA_GUARD_MASK) == CXA_GUARD_INIT_DONE) {
1434
1435
singleton_unlock ();
1435
1436
return 0 ;
1436
1437
}
1437
- MBED_ASSERT (0 == (*guard_object & CXA_GUARD_MASK));
1438
- * guard_object = *guard_object | CXA_GUARD_INIT_IN_PROGRESS;
1438
+ MBED_ASSERT ((guard & CXA_GUARD_MASK) == 0 );
1439
+ core_util_atomic_store_u8 ( guard_object, guard | CXA_GUARD_INIT_IN_PROGRESS) ;
1439
1440
return 1 ;
1440
1441
}
1441
1442
1442
1443
extern " C" void __cxa_guard_release (int *guard_object_p)
1443
1444
{
1444
1445
uint8_t *guard_object = (uint8_t *)guard_object_p;
1445
- MBED_ASSERT (CXA_GUARD_INIT_IN_PROGRESS == (*guard_object & CXA_GUARD_MASK));
1446
- *guard_object = (*guard_object & ~CXA_GUARD_MASK) | CXA_GUARD_INIT_DONE;
1446
+ uint8_t guard = *guard_object;
1447
+ MBED_ASSERT ((guard & CXA_GUARD_MASK) == CXA_GUARD_INIT_IN_PROGRESS);
1448
+ core_util_atomic_store_u8 (guard_object, (guard & ~CXA_GUARD_MASK) | CXA_GUARD_INIT_DONE);
1447
1449
singleton_unlock ();
1448
1450
}
1449
1451
1450
1452
extern " C" void __cxa_guard_abort (int *guard_object_p)
1451
1453
{
1452
1454
uint8_t *guard_object = (uint8_t *)guard_object_p;
1453
- MBED_ASSERT (CXA_GUARD_INIT_IN_PROGRESS == (*guard_object & CXA_GUARD_MASK));
1454
- *guard_object = *guard_object & ~CXA_GUARD_INIT_IN_PROGRESS;
1455
+ uint8_t guard = *guard_object;
1456
+ MBED_ASSERT ((guard & CXA_GUARD_MASK) == CXA_GUARD_INIT_IN_PROGRESS);
1457
+ core_util_atomic_store_u8 (guard_object, guard & ~CXA_GUARD_INIT_IN_PROGRESS);
1455
1458
singleton_unlock ();
1456
1459
}
1457
1460
1458
1461
#endif
1459
1462
1460
- #if defined(MBED_MEM_TRACING_ENABLED) && (defined(__CC_ARM ) || defined(__ICCARM__) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) ))
1463
+ #if defined(MBED_MEM_TRACING_ENABLED) && (defined(__ARMCC_VERSION ) || defined(__ICCARM__))
1461
1464
1462
1465
// If the memory tracing is enabled, the wrappers in mbed_alloc_wrappers.cpp
1463
1466
// provide the implementation for these. Note: this needs to use the wrappers
0 commit comments