This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
__register_frame () change in 1997-12-07 egcs
- To: egcs at cygnus dot com
- Subject: __register_frame () change in 1997-12-07 egcs
- From: hjl at lucon dot org (H.J. Lu)
- Date: Mon, 8 Dec 1997 13:26:04 -0800 (PST)
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.
BTW, restore_tree_status () in tree.c has
/* If we were compiling a toplevel function that we don't actually want
to save anything from, return the obstack to the pool. */
if (context == NULL_TREE
&& obstack_empty_p (function_maybepermanent_obstack))
{
struct simple_obstack_stack *current, **p = &toplev_inline_obstacks;
while ((*p)->obstack != function_maybepermanent_obstack)
p = &((*p)->next);
current = *p;
*p = current->next;
current->next = extra_inline_obstacks;
extra_inline_obstacks = current;
}
But it doesn't check if toplev_inline_obstacks is NULL. It failed
gcc.c-torture/execute/921215-1.c with -O2 -fomit-frame-pointer
-finline-functions
--
H.J. Lu (hjl@gnu.org)