This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Profiling broken in GCC 4.1.0 for DJGPP
- From: Gordon dot Schumacher at seagate dot com
- To: gcc at gcc dot gnu dot org
- Date: Tue, 12 Dec 2006 11:52:51 -0700
- Subject: Profiling broken in GCC 4.1.0 for DJGPP
- Sensitivity:
I've come across an issue with using the -pg switch for profiling on the
DJGPP DOS platform, using GCC 4.1.0. After some digging through
disassembly, I found that the part of the function prologue for main()
before the call to mcount() is using the ECX register, and the call to
the mcount() function appears to be clobbering it. I've verified that
GCC 4.1.0 for Linux appears to work, and GCC 4.0.1 for DJGPP also works
fine.
Here's the assembly for the function prologue of main():
lea 0x4(%esp),%ecx
and $0xfffffff0,%esp
pushl 0xfffffffc(%ecx)
push %ebp
mov %esp,%ebp
push %ebx
push %ecx
mov $0x146e0,%edx
call 0x3890 <mcount>
mov %ecx,%ebx <--- clobbered value of ECX is used
And here's the relevant portion of mcount():
push %ebp
mov %esp,%ebp
push %edi
push %esi
push %ebx
sub $0x1c,%esp
mov %edx,0xffffffec(%ebp)
mov 0x15ca0,%ecx <--- ECX gets clobbered
So I'm trying to figure out what's changed; is there a new requirement
that ECX is not preserved that didn't exist before? I've looked through
some GCC source but I'm really not at all sure what I should be looking
for.
TIA...