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