| 1263 | } |
| 1264 | |
| 1265 | static bool |
| 1266 | isAlreadyReported(struct CSourceLocation *pLocation) |
| 1267 | { |
| 1268 | /* |
| 1269 | * This code is shared between libc, kernel and standalone usage. |
| 1270 | * It shall work in early bootstrap phase of both of them. |
| 1271 | */ |
| 1272 | |
| 1273 | uint32_t siOldValue; |
| 1274 | volatile uint32_t *pLine; |
| 1275 | |
| 1276 | ASSERT(pLocation); |
| 1277 | |
| 1278 | pLine = &pLocation->mLine; |
| 1279 | |
| 1280 | do { |
| 1281 | siOldValue = *pLine; |
| 1282 | } while (__sync_val_compare_and_swap(pLine, siOldValue, siOldValue | ACK_REPORTED) != siOldValue); |
| 1283 | |
| 1284 | return ISSET(siOldValue, ACK_REPORTED); |
| 1285 | } |
| 1286 | |
| 1287 | static size_t |
| 1288 | zDeserializeTypeWidth(struct CTypeDescriptor *pType) |
no outgoing calls
no test coverage detected