https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65169
Markus Trippelsdorf <trippels at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution|--- |MOVED
--- Comment #3 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
(In reply to Alan Modra from comment #2)
> I couldn't reproduce this using svn llvm rev 230301, gcc-5 20150223, and
> binutils 2.25.51.20150223. I was building on a power7 box (because that's
> where I happened to have my latest gcc build), so used -mcpu=power7
> -mno-strict-align. That ought to trigger the same block move code as
> -mcpu=power8, and a quick visual inspection showed that to be the case.
>
> I'm guessing that the "s/break/ eak/" difference Markus sees comes from
> utils/TableGen/IntrinsicEmitter.cpp IntrinsicEmitter::EmitAttributes
> if (numAttrs) {
> OS << " NumAttrs = " << numAttrs << ";\n";
> OS << " break;\n";
> OS << " }\n";
>
> My generated code for the above looked good, and ran properly on power7.
> -mcpu=power8 code didn't look much different.
>
> Markus, are you using gold? (I wasn't.) The strings are in a string merge
> section, and I'm wondering if gold miscalculates some string offset.
Yes, I was using gold.
And indeed using ld.bfd fixes the issue.
I will open a binutils bug later. x86_64 gold is fine BTW.