This is the mail archive of the gcc@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]

__register_frame () change in 1997-12-07 egcs


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)


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