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

Reply via email to