https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80082
Bug ID: 80082 Summary: GCC incorrectly assumes Cortex-r[578] have 64-bit single-copy atomic LDRD Product: gcc Version: 7.0.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: prakhar.bahuguna at arm dot com Target Milestone: --- Created attachment 40992 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40992&action=edit Atomic load reproducer GCC currently assumes that if your armv7* architecture has both arm and Thumb division instructions then you have the LPAE extension. This causes the compiler to assume that LDRD is single-copy atomic. Cortex-R cores with ARM division are thus incorrectly treated as having LPAE. This is a bug that leads to incorrect code that would likely to be difficult to track down in the field (potential data corruption during contention). Steps to reproduce: * Compile atomic_load.c with arm-none-eabi-gcc -mcpu=cortex-r5 atomic_load.c -S -O2 -o - * Note that in the output, LDRD is used to load x instead of LDREXD, despite LDRD not being single-copy atomic on Cortex-R profile. The same issue can be reproduced for -mcpu=cortex-r7 and cortex-r8.