NPTL + static + linux : incorrect __register_frame_info_bases code generation

Eric Valette eric.valette@free.fr
Mon Nov 8 14:31:00 GMT 2004


After sucessfully compiling NPTL static posix threads on debian
<http://sources.redhat.com/bugzilla/show_bug.cgi?id=519>

I decided to run the Open Posix test suite. After fixing the
LDFLAGS, -Werror, I managed to compile and run most of them but
some do always do a sigsegv on startup.

I traced it to be __register_frame_info_bases inconditionnaly calling 0X0

Dump of assembler code for function __register_frame_info_bases:
0x0809bbb0 <__register_frame_info_bases+0>:     push   %ebp
0x0809bbb1 <__register_frame_info_bases+1>:     mov    %esp,%ebp
0x0809bbb3 <__register_frame_info_bases+3>:     push   %edi
0x0809bbb4 <__register_frame_info_bases+4>:     push   %esi
0x0809bbb5 <__register_frame_info_bases+5>:     push   %ebx
0x0809bbb6 <__register_frame_info_bases+6>:     sub    $0xc,%esp
0x0809bbb9 <__register_frame_info_bases+9>:     mov    0x8(%ebp),%edx
0x0809bbbc <__register_frame_info_bases+12>:    call   0x809bbc1 
<__register_frame_info_bases+17>
0x0809bbc1 <__register_frame_info_bases+17>:    pop    %ebx
0x0809bbc2 <__register_frame_info_bases+18>:    add    $0x1d807,%ebx
0x0809bbc8 <__register_frame_info_bases+24>:    test   %edx,%edx
0x0809bbca <__register_frame_info_bases+26>:    mov    0xc(%ebp),%esi
0x0809bbcd <__register_frame_info_bases+29>:    je     0x809bc30 
<__register_frame_info_bases+128>
0x0809bbcf <__register_frame_info_bases+31>:    mov    (%edx),%eax
0x0809bbd1 <__register_frame_info_bases+33>:    test   %eax,%eax
0x0809bbd3 <__register_frame_info_bases+35>:    je     0x809bc30 
<__register_frame_info_bases+128>
0x0809bbd5 <__register_frame_info_bases+37>:    mov    0x10(%ebp),%eax
0x0809bbd8 <__register_frame_info_bases+40>:    mov    %eax,0x4(%esi)
0x0809bbdb <__register_frame_info_bases+43>:    mov    0x14(%ebp),%eax
0x0809bbde <__register_frame_info_bases+46>:    mov    %eax,0x8(%esi)
0x0809bbe1 <__register_frame_info_bases+49>:    movl   $0x0,0x10(%esi)
0x0809bbe8 <__register_frame_info_bases+56>:    lea    0x37bc(%ebx),%eax
0x0809bbee <__register_frame_info_bases+62>:    orw    $0x7f8,0x10(%esi)
0x0809bbf4 <__register_frame_info_bases+68>:    mov    %edx,0xc(%esi)
0x0809bbf7 <__register_frame_info_bases+71>:    mov    %eax,0xfffffff0(%ebp)
0x0809bbfa <__register_frame_info_bases+74>:    mov    0xc(%ebx),%eax
0x0809bc00 <__register_frame_info_bases+80>:    test   %eax,%eax
0x0809bc02 <__register_frame_info_bases+82>:    setne  %al
0x0809bc05 <__register_frame_info_bases+85>:    and    $0xff,%eax
0x0809bc0a <__register_frame_info_bases+90>:    test   %eax,%eax
0x0809bc0c <__register_frame_info_bases+92>:    movl   $0xffffffff,(%esi)
0x0809bc12 <__register_frame_info_bases+98>:    mov    %eax,%edi
0x0809bc14 <__register_frame_info_bases+100>:   jne    0x809bc60 
<__register_frame_info_bases+176>
0x0809bc16 <__register_frame_info_bases+102>:   mov    0x37d8(%ebx),%eax
0x0809bc1c <__register_frame_info_bases+108>:   test   %edi,%edi
0x0809bc1e <__register_frame_info_bases+110>:   mov    %eax,0x14(%esi)
0x0809bc21 <__register_frame_info_bases+113>:   mov    %esi,0x37d8(%ebx)
0x0809bc27 <__register_frame_info_bases+119>:   jne    0x809bc40 
<__register_frame_info_bases+144>
0x0809bc29 <__register_frame_info_bases+121>:   lea    0x0(%esi),%esi
0x0809bc30 <__register_frame_info_bases+128>:   lea    0xfffffff4(%ebp),%esp
0x0809bc33 <__register_frame_info_bases+131>:   pop    %ebx
0x0809bc34 <__register_frame_info_bases+132>:   pop    %esi
0x0809bc35 <__register_frame_info_bases+133>:   pop    %edi
0x0809bc36 <__register_frame_info_bases+134>:   pop    %ebp
0x0809bc37 <__register_frame_info_bases+135>:   ret
0x0809bc38 <__register_frame_info_bases+136>:   nop
0x0809bc39 <__register_frame_info_bases+137>:   lea    0x0(%esi),%esi
0x0809bc40 <__register_frame_info_bases+144>:   mov    0xfffffff0(%ebp),%esi
---Type <return> to continue, or q <return> to quit---
0x0809bc43 <__register_frame_info_bases+147>:   sub    $0xc,%esp
0x0809bc46 <__register_frame_info_bases+150>:   push   %esi
0x0809bc47 <__register_frame_info_bases+151>:   call   0x0 <===========
0x0809bc4c <__register_frame_info_bases+156>:   add    $0x10,%esp
0x0809bc4f <__register_frame_info_bases+159>:   lea    0xfffffff4(%ebp),%esp
0x0809bc52 <__register_frame_info_bases+162>:   pop    %ebx
0x0809bc53 <__register_frame_info_bases+163>:   pop    %esi
0x0809bc54 <__register_frame_info_bases+164>:   pop    %edi
0x0809bc55 <__register_frame_info_bases+165>:   pop    %ebp
0x0809bc56 <__register_frame_info_bases+166>:   ret
0x0809bc57 <__register_frame_info_bases+167>:   mov    %esi,%esi
0x0809bc59 <__register_frame_info_bases+169>:   lea    0x0(%edi),%edi
0x0809bc60 <__register_frame_info_bases+176>:   sub    $0xc,%esp
0x0809bc63 <__register_frame_info_bases+179>:   mov    0xfffffff0(%ebp),%eax
0x0809bc66 <__register_frame_info_bases+182>:   push   %eax
0x0809bc67 <__register_frame_info_bases+183>:   call   0x0  <===========
0x0809bc6c <__register_frame_info_bases+188>:   add    $0x10,%esp
0x0809bc6f <__register_frame_info_bases+191>:   jmp    0x809bc16 
<__register_frame_info_bases+102>
0x0809bc71 <__register_frame_info_bases+193>:   jmp    0x809bc80 
<__register_frame_info>

-- 
    __
   /  `                   	Eric Valette
  /--   __  o _.          	6 rue Paul Le Flem
(___, / (_(_(__         	35740 Pace

Tel: +33 (0)2 99 85 26 76	Fax: +33 (0)2 99 85 26 76
E-mail: eric.valette@free.fr





More information about the Libc-alpha mailing list