------- Comment #20 from jh at suse dot cz  2008-02-24 20:49 -------
Subject: Re:  Stack not aligned at mod 16 byte boundary in x86_64 code

Hi,
what about this patch.  There seems to be availablity check missing
earlier in code.  This way GCC will always align calls to functions that
might be overwritten (thus resolved by dynamic linker) with exception of
the recursive calls..

I still wonder how this problem can hit us so late: if we was
misaligning commonly stack on PIC calls and dynamic linker was crashing
on it, I would expect darwin to be unable to boot at all...

Honza

Index: calls.c
===================================================================
--- calls.c     (revision 132575)
+++ calls.c     (working copy)
@@ -2102,7 +2102,9 @@ expand_call (tree exp, rtx target, int i
   if (fndecl)
     {
       struct cgraph_rtl_info *i = cgraph_rtl_info (fndecl);
-      if (i && i->preferred_incoming_stack_boundary)
+      if (i && i->preferred_incoming_stack_boundary
+         && (cgraph_function_body_availability (cgraph_node (fndecl))
+             >= AVAIL_AVAILABLE))
        preferred_stack_boundary = i->preferred_incoming_stack_boundary;
     }



-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35271

Reply via email to