Re: RedHat Linux 6.0 warning: stack corruption with "g++ -O2"

Matthew D. Langston (langston@SLAC.stanford.edu)
Wed, 30 Jun 1999 08:37:55 -0700


This is a multi-part message in MIME format.

--Boundary_(ID_oAJKd3MvsCzBAyx4fdC0Bg)
Content-type: text/plain; charset=us-ascii
Content-transfer-encoding: 7BIT

Hi Damir

Damir Buskulic wrote:
>
> It's very nice you warn us. Could you be more specific, please. I'm
> using -O2 on LinuxPPC R5 which is the equivalent of RedHat6.0 for
> Macs. What is the exact problem, and could you give a simple script
> that shows it, so I can try and see if it happens also on my mnachine?

I am cross posting to the roottalk list in case others may want to test
their systems for this bug as well.

I have attached the files which I included in my original bug report to
the egcs developers.

To test if you might have the bug, then compile "test.cxx" with
"g++ -O2". On my system this will create a program that will cause a
core dump at run time due to a signal 11, Segmentation fault.

If you inspect the program with gdb (making sure to specify the core
file), and if you know Intel assembly (see the file test.s for the full,
but tiny, assembler listing) then it will be obvious where the problem
is (pow's exponent is being used as a register offset).

--
Matthew D. Langston
SLD, Stanford Linear Accelerator Center
langston@SLAC.Stanford.EDU

--Boundary_(ID_oAJKd3MvsCzBAyx4fdC0Bg) Content-type: text/plain; charset=us-ascii; name=Makefile Content-disposition: inline; filename=Makefile Content-transfer-encoding: 7BIT

# -*- Makefile -*-

VPATH = /mnt/hdc/projects/ROOT/2.00/root-bug/src CC = g++ CXX = g++ CXXFLAGS = -g -O2 -Wall

.PHONY: check clean check: test ./test

clean: rm -f test core a.out *.o *~

%.o: %.cxx $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@

--Boundary_(ID_oAJKd3MvsCzBAyx4fdC0Bg) Content-type: text/plain; charset=us-ascii; name=README Content-disposition: inline; filename=README Content-transfer-encoding: 7BIT

egcs 1.1.2 bug: stack corruption with "pow" and "-O2"

I have found that g++ from egcs 1.1.2 produces bad assembly code when the "pow" function from glibc 2.1 is inlined (via the "-O2" optimization flag) in the same stack frame as a trivial C++ object which has a user defined default constructor and copy constructor.

The following code reproduces this problem on my system:

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< begin example <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< #include <cmath>

class Foo { Foo( const Foo& ); public: Foo() {} };

int main() { Foo foo;

double m = pow( 1.0, 1.0 ); m = pow( m, 1.0 ); } >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> end example >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Compiling this example on my system using "g++ -O2" will create a program that will cause a core dump at run time due to a signal 11, Segmentation fault.

The interesting thing about this bug is that commenting out the private copy constructor makes the bug disappear.

My system configuration is:

Machine configuration with bug ------------------------------ RedHat Linux 6.0 Intel kernel 2.2.5 glibc 2.1.1 egcs 1.1.2 binutils 2.9.1.0.23

Here is the command line, and its output, used to create `test.ii' (which is attached below):

langston@seto$ g++ -v --save-temps -O2 test.cxx Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/specs gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release) /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/cpp -lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=91 -D__ELF__ -Dunix -Di386 -D__i386__ -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__i386__ -D__linux__ -D__unix -D__i386 -D__linux -Asystem(posix) -D__EXCEPTIONS -D__OPTIMIZE__ -Asystem(unix) -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ test.cxx test.ii GNU CPP version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release) (i386 Linux/ELF) #include "..." search starts here: #include <...> search starts here: /usr/include/g++-2 /usr/i386-redhat-linux/include /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include /usr/include End of search list. /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/cc1plus test.ii -quiet -dumpbase test.cc -O2 -version -o test.s GNU C++ version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release) (i386-redhat-linux) compiled by GNU C version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release). as -V -Qy -o test.o test.s GNU assembler version 2.9.1 (i386-redhat-linux), using BFD version 2.9.1.0.23 /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/collect2 -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/crtbegin.o -L/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66 -L/usr/i386-redhat-linux/lib test.o -lstdc++ -lm -lgcc -lc -lgcc /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/crtend.o /usr/lib/crtn.o langston@seto$

--
Matthew D. Langston
SLD, Stanford Linear Accelerator Center
langston@SLAC.Stanford.EDU

--Boundary_(ID_oAJKd3MvsCzBAyx4fdC0Bg) Content-type: text/plain; charset=us-ascii; name=test.cxx Content-disposition: inline; filename=test.cxx Content-transfer-encoding: 7BIT

#include <cmath>

class Foo { Foo( const Foo& ); public: Foo() {} };

int main() { Foo foo;

double m = pow( 1.0, 1.0 ); m = pow( m, 1.0 ); }

--Boundary_(ID_oAJKd3MvsCzBAyx4fdC0Bg) Content-type: application/x-gzip; name=test.ii.gz Content-disposition: inline; filename=test.ii.gz Content-transfer-encoding: base64

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 lU8fT/4fE8gYxekQAQA=

--Boundary_(ID_oAJKd3MvsCzBAyx4fdC0Bg) Content-type: text/plain; charset=us-ascii; name=test.s Content-disposition: inline; filename=test.s Content-transfer-encoding: 7BIT

.file "test.cxx" .version "01.01" gcc2_compiled.: .section .rodata .align 8 .LC46: .long 0x0,0x3ff00000 .align 16 .LC47: .long 0x0,0x80000000,0x3fff .text .align 4 .globl main .type main,@function main: .LFB1: pushl %ebp .LCFI0: movl %esp,%ebp .LCFI1: subl $36,%esp .LCFI2: pushl %edi .LCFI3: pushl %esi .LCFI4: pushl %ebx .LCFI5: leal -4(%ebp),%ebx fld1 fld %st(0) fnstcw -4(%ebx) movl -4(%ebx),%eax movb $12,%ah movl %eax,-12(%ebx) fldcw -12(%ebx) fistpll -12(%ebx) movl -12(%ebx),%esi movl -8(%ebx),%edi fldcw -4(%ebx) pushl %edi pushl %esi fildll (%esp) addl $8,%esp fucomp %st(1) fnstsw %ax andb $68,%ah xorb $64,%ah jne .L326 fld1 movl %esi,%eax orl %edi,%eax jne .L327 fstp %st(0) jmp .L325 .p2align 4,,7 .L327: testl %edi,%edi jge .L332 negl %esi adcl $0,%edi negl %edi jmp .L332 .L352: fxch %st(1) .p2align 4,,7 .L332: testl $1,%esi je .L333 fld %st(1) fmulp %st,%st(1) .L333: shrdl $1,%edi,%esi sarl $1,%edi movl %esi,%eax orl %edi,%eax je .L354 fxch %st(1) fmul %st(0),%st jmp .L352 .p2align 4,,7 .L326: fldl .LC46 fxch %st(1) #APP fyl2x #NO_APP fstpt -36(%ebp) fldt -36(%ebp) fldl .LC46 #APP fmul %st(1) # y * log2(x) fst %st(1) frndint # int(y * log2(x)) fxch fsub %st(1) # fract(y * log2(x)) f2xm1 # 2^(fract(y * log2(x))) - 1 #NO_APP fldt .LC47 faddp %st,%st(1) #APP fscale #NO_APP .L354: fstp %st(1) subl $8,%esp fstpl (%esp) popl %eax popl %edx movl %eax,-24(%ebp) movl %edx,-20(%ebp) fldl -24(%ebp) .L325: fld1 fld %st(0) fnstcw -4(%ebx) movl -4(%ebx),%edx movb $12,%dh movl %edx,-12(%ebx) fldcw -12(%ebx) fistpll -12(%ebx) movl -12(%ebx),%ebx movl -8(%ebx),%esi fldcw -4(%ebx) fldz fucomp %st(2) fnstsw %ax andb $69,%ah cmpb $64,%ah je .L353 pushl %esi pushl %ebx fildll (%esp) addl $8,%esp fucompp fnstsw %ax andb $68,%ah xorb $64,%ah jne .L338 fstp %st(0) movl %ebx,%eax orl %esi,%eax je .L337 testl %esi,%esi jge .L344 negl %ebx adcl $0,%esi negl %esi .p2align 4,,7 .L344: shrdl $1,%esi,%ebx sarl $1,%esi movl %ebx,%eax orl %esi,%eax je .L337 jmp .L344 .p2align 4,,7 .L338: fldl .LC46 fxch %st(1) #APP fyl2x #NO_APP fstpt -36(%ebp) fldt -36(%ebp) fldl .LC46 #APP fmul %st(1) # y * log2(x) fst %st(1) frndint # int(y * log2(x)) fxch fsub %st(1) # fract(y * log2(x)) f2xm1 # 2^(fract(y * log2(x))) - 1 #NO_APP fldt .LC47 faddp %st,%st(1) #APP fscale #NO_APP .L353: fstp %st(0) fstp %st(0) .L337: xorl %eax,%eax leal -48(%ebp),%esp popl %ebx popl %esi popl %edi leave ret .LFE1: .Lfe1: .size main,.Lfe1-main

.section .eh_frame,"aw",@progbits __FRAME_BEGIN__: .4byte .LLCIE1 .LSCIE1: .4byte 0x0 .byte 0x1 .byte 0x0 .byte 0x1 .byte 0x7c .byte 0x8 .byte 0xc .byte 0x4 .byte 0x4 .byte 0x88 .byte 0x1 .align 4 .LECIE1: .set .LLCIE1,.LECIE1-.LSCIE1 .4byte .LLFDE1 .LSFDE1: .4byte .LSFDE1-__FRAME_BEGIN__ .4byte .LFB1 .4byte .LFE1-.LFB1 .byte 0x4 .4byte .LCFI0-.LFB1 .byte 0xe .byte 0x8 .byte 0x85 .byte 0x2 .byte 0x4 .4byte .LCFI1-.LCFI0 .byte 0xd .byte 0x5 .byte 0x4 .4byte .LCFI3-.LCFI1 .byte 0x87 .byte 0xc .byte 0x4 .4byte .LCFI4-.LCFI3 .byte 0x86 .byte 0xd .byte 0x4 .4byte .LCFI5-.LCFI4 .byte 0x83 .byte 0xe .align 4 .LEFDE1: .set .LLFDE1,.LEFDE1-.LSFDE1 .ident "GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)"

--Boundary_(ID_oAJKd3MvsCzBAyx4fdC0Bg)--