MIPS16 code can't do atomic operations directly, so it calls into out-of-line
versions that are compiled as -mno-mips16. These out-of-line versions use
the same open-coded implementation as you'd get in normal -mno-mips16 code.
This is done by libgcc/sync.c, which contains code like like:
static void
sync_synchronize (void)
{
__sync_synchronize ();
}
typeof (sync_synchronize) __sync_synchronize
__attribute__((alias ("sync_synchronize")));
With the recent cgraph changes, we follow the alias and the function becomes
an infinite loop.
The code above was always a bit of a hack, so it's not surprising it broke.
Is this a valid use of aliases? If not, can anyone think of a better
way of doing it? If so, any suggestions on how to fix it? I made a
couple of flailing attempts but they both caused other problems...
Sorry if this has already been reported btw.
Thanks,
Richard