This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


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

libgcc_s.so.1 ASIS won't work with glibc.


On Mon, Jul 02, 2001 at 12:57:40PM -0700, H . J . Lu wrote:
> > > 
> > > Here is an UNTESTED patch. I don't believe it is even correct. It
> > > only compiles. I think unwind-dw2.c is the best place to add
> > > __frame_state_for. Any comments?
> > 
> > Richard explicitely said he does not want to put this old cruft into
> > libgcc_s, so we need to hack this in glibc for platforms which need that.
> 
> Same here. See
> 
> /* This provides the backward compatibility for existing binaries
>    compiled against g++ v2 dwarf 2 frame based exception.
>    
>    FIXME: We really need this in libgcc.a only.  */
> 
> It should be in libgcc.a only, not in libgcc_s.so. I will found a way
> to do it after we get it to work first.
> 

I think we have a serious problem with glibc. The current glibc has

# objdump --dynamic-sym /lib/libc.so.6 | grep frame
0000000000112c70 g    DF .text  000000000000002d  GLIBC_2.0   __register_frame
00000000001138a0 g    DF .text  000000000000024b  GLIBC_2.0   __frame_state_for
0000000000112d20 g    DF .text  000000000000002d  GLIBC_2.0 __register_frame_table
0000000000112d50 g    DF .text  00000000000000ac  GLIBC_2.0 __deregister_frame_info
0000000000112e00 g    DF .text  000000000000002a  GLIBC_2.0 __deregister_frame
0000000000112ca0 g    DF .text  000000000000007d  GLIBC_2.0 __register_frame_info_table
0000000000112be0 g    DF .text  0000000000000081  GLIBC_2.0 __register_frame_info

and gcc 3.0 has

# objdump --dynamic-sym libgcc_s.so.1 | grep __register_frame
0000000000004e90 g    DF .text  000000000000002c  GLIBC_2.0   __register_frame
0000000000004f80 g    DF .text  000000000000002c  GLIBC_2.0 __register_frame_table
0000000000004dd0 g    DF .text  000000000000008c  GCC_3.0 __register_frame_info_bases
0000000000004ec0 g    DF .text  0000000000000090  GCC_3.0 __register_frame_info_table_bases
0000000000004f50 g    DF .text  000000000000002a  GLIBC_2.0 __register_frame_info_table
0000000000004e60 g    DF .text  000000000000002a  GLIBC_2.0 __register_frame_info

I don't believe it will ever work since __register_frame,
__register_frame_table, __register_frame_info_table and
__register_frame_info have different ABIs in libgcc_s.so.1 and
libc.so.6. You cannot use the same version, GLIBC_2.0, in
libgcc_s.so.1. libgcc_s.so.1 should use GCC_3.0 for its verion of
those functions since the ones in libgcc_s.so.1 won't work with
the existing binaries compiled with g++ v2 dwarf2 frame based EH.
glibc somehow has to provide the GLIBC_2.0 version of those functions
if we want to support them in glibc compiled with gcc 3.0. One
way to get it to work is we provide the backward compatible g++ v2
dwarf2 frame based EH in libc.so.6 and let libgcc_s.so.1 provide the
g++ v3 dwarf2 frame based EH. Did I miss something?


H.J.


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