Re: BUG: GCC-4.4.x changes the function frame on some functions

From: Thomas Gleixner
Date: Thu Nov 19 2009 - 10:40:22 EST


On Thu, 19 Nov 2009, Thomas Gleixner wrote:

Can the GCC folks please shed some light on this:

standard function start:

push %ebp
mov %esp, %ebp
....
call mcount

modified function start on a handful of functions only seen with gcc
4.4.x on x86 32 bit:

push %edi
lea 0x8(%esp),%edi
and $0xfffffff0,%esp
pushl -0x4(%edi)
push %ebp
mov %esp,%ebp
...
call mcount

This modification leads to a hard to solve problem in the kernel
function graph tracer which assumes that the stack looks like:

return address
saved ebp

With the modified function start sequence this is not longer true and
the manipulation of the return address on the stack fails silently.

Neither gcc 4.3 nor gcc 3.4 are generating such function frames, so it
looks like a gcc 4.4.x feature.

There is no real obvious reason why the edi magic needs to be done
_before_

push %ebp
mov %esp,%ebp

Thanks,

tglx
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/