This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

code generation bug in x86 PIC


The current mainline compiler (sources from late 2000-11-14 evening)
produces wrong PIC.  The compiler worked fine 3 or 4 days before that.
Preprocessed sources are available at

   http://www.cygnus.com/~drepper/backtrace.i.gz

(really small this time).  The problem shows up when compiling with

	gcc -O -fPIC -c backtrace.i

and it's related to using an uninitialized register.  Looking at the
non-PIC one could assume that the necessary movs are optimized out.

00000004 <__backtrace>:
   4:   55                      push   %ebp
   5:   89 e5                   mov    %esp,%ebp
   7:   57                      push   %edi
   8:   56                      push   %esi
   9:   53                      push   %ebx
   a:   83 ec 08                sub    $0x8,%esp
   d:   e8 ee ff ff ff          call   0 <gcc2_compiled.>
  12:   81 c3 02 00 00 00       add    $0x2,%ebx
                        14: R_386_GOTPC _GLOBAL_OFFSET_TABLE_
  18:   8b 7d 0c                mov    0xc(%ebp),%edi
  1b:   b9 00 00 00 00          mov    $0x0,%ecx
  20:   39 f9                   cmp    %edi,%ecx
  22:   7d 38                   jge    5c <__backtrace+0x58>
  24:   3b 55 f0                cmp    0xfffffff0(%ebp),%edx
[...]

In the last instruction %edx is not initialized.

-- 
---------------.                          ,-.   1325 Chesapeake Terrace
Ulrich Drepper  \    ,-------------------'   \  Sunnyvale, CA 94089 USA
Red Hat          `--' drepper at redhat.com   `------------------------

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]