Andrew Haley wrote: > Thomas Gleixner wrote: > >> While testing various kernel configs we found out that the problem >> comes and goes. Finally I started to compare the gcc command line >> options and after some fiddling it turned out that the following >> minimal deltas change the code generator behaviour: >> >> Bad: -march=pentium-mmx -Wa,-mtune=generic32 >> Good: -march=i686 -mtune=generic -Wa,-mtune=generic32 >> Good: -march=pentium-mmx -mtune-generic -Wa,-mtune=generic32 >> >> I'm not supposed to understand the logic behind that, right ? > > I don't either. I'm seeing: > > timer_stats_update_stats: > timer_stats_update_stats: > pushl %edi < > leal 8(%esp), %edi < > andl $-16, %esp < > pushl -4(%edi) < > pushl %ebp pushl > %ebp > movl %esp, %ebp movl > %esp, %ebp > pushl %edi | andl > $-16, %esp > pushl %esi | subl > $112, %esp > pushl %ebx | movl > %ebx, 100(%esp) > subl $108, %esp | movl > %esi, 104(%esp) > > movl > %edi, 108(%esp) > call mcount call > mcount > > where the only difference is -mtune=generic. I'm investigating.
Forget that, I see from the gcc-bugs list that hj has tracked it down to the use of DRAP, and for some reason the mtune options affect that. He's the best person to fix this. Andrew.