This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: __register_frame () change in 1997-12-07 egcs
- To: hjl at lucon dot org, law at cygnus dot com
- Subject: Re: __register_frame () change in 1997-12-07 egcs
- From: meissner at cygnus dot com
- Date: Mon, 8 Dec 1997 18:14:53 -0500 (EST)
- Cc: egcs at cygnus dot com
| In message <m0xfAgm-0004ecC@ocean.lucon.org>you write:
| > Hi,
| >
| > __register_frame () change in 1997-12-07 egcs causes many problems.
| > Since __register_frame () called in crtbegin.o is in libgcc2.c and
| > gcc -shared includes crtbegin.o and -lgcc, any libc.so built by
| > previous egcs has __register_frame () in libc.so. Now the ABI for
| > __register_frame () is changed, that is a big mess for Linux since
| > shared libraries are used a lot. When the ABI of a function in
| > shared library is changed like this, it doesn't work too well.
| > It should be fixed ASAP.
| Well, then we've got a problem. We're open to suggestions for how to
| fix it.
You might fall back on the old scheme of using common variable that is
initialized to the address of the __register_frame function inside frame.o. If
nobody calls the frame functions, the variable is is 0. For example, if
crtbegin.o contains:
void (__fptr)();
/* ... */
static void
init_dummy()
{
/* ... */
if (__fptr)
(*__fptr)();
}
and frame.c adds:
void (__fptr)() = __register_frame;
at the end (or after __register_frame decl).