[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#621420: Misbuilds busybox on ARM



 I'm attaching the corresponding gcc-linaro backport from bzr r99440.

-- 
Loïc Minier
=== modified file 'ChangeLog.linaro'
--- ChangeLog.linaro	2010-11-27 15:24:12 +0000
+++ ChangeLog.linaro	2010-11-27 15:30:38 +0000
@@ -1,3 +1,15 @@
+2010-11-24  Chung-Lin Tang  <cltang@codesourcery.com>
+
+	2010-07-08  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
+
+	PR bootstrap/44768
+
+	* cfgexpand.c (estimated_stack_frame_size): Make self-contained
+	with respect to current_function_decl. Pass decl of the function.
+	* tree-inline.h (estimated_stack_frame_size): Adjust prototype.
+	* ipa-inline.c (compute_inline_parameters): Pass decl to
+	estimated_stack_frame_size.
+
 2010-11-16  Chung-Lin Tang  <cltang@codesourcery.com>
 
 	2010-07-21  Richard Henderson  <rth@redhat.com>

=== modified file 'gcc/cfgexpand.c'
--- gcc/cfgexpand.c	2010-10-04 00:50:43 +0000
+++ gcc/cfgexpand.c	2010-11-24 08:43:48 +0000
@@ -1248,8 +1248,8 @@
   stack_vars_alloc = stack_vars_num = 0;
 }
 
-/* Make a fair guess for the size of the stack frame of the current
-   function.  This doesn't have to be exact, the result is only used
+/* Make a fair guess for the size of the stack frame of the decl
+   passed.  This doesn't have to be exact, the result is only used
    in the inline heuristics.  So we don't want to run the full stack
    var packing algorithm (which is quadratic in the number of stack
    vars).  Instead, we calculate the total size of all stack vars.
@@ -1257,11 +1257,14 @@
    vars doesn't happen very often.  */
 
 HOST_WIDE_INT
-estimated_stack_frame_size (void)
+estimated_stack_frame_size (tree decl)
 {
   HOST_WIDE_INT size = 0;
   size_t i;
   tree t, outer_block = DECL_INITIAL (current_function_decl);
+  tree old_cur_fun_decl = current_function_decl;
+  current_function_decl = decl;
+  push_cfun (DECL_STRUCT_FUNCTION (decl));
 
   init_vars_expansion ();
 
@@ -1284,7 +1287,8 @@
       size += account_stack_vars ();
       fini_vars_expansion ();
     }
-
+  pop_cfun ();
+  current_function_decl = old_cur_fun_decl;
   return size;
 }
 

=== modified file 'gcc/ipa-inline.c'
--- gcc/ipa-inline.c	2010-06-30 21:30:12 +0000
+++ gcc/ipa-inline.c	2010-11-24 08:43:48 +0000
@@ -1967,7 +1967,7 @@
 
   /* Estimate the stack size for the function.  But not at -O0
      because estimated_stack_frame_size is a quadratic problem.  */
-  self_stack_size = optimize ? estimated_stack_frame_size () : 0;
+  self_stack_size = optimize ? estimated_stack_frame_size (node->decl) : 0;
   inline_summary (node)->estimated_self_stack_size = self_stack_size;
   node->global.estimated_stack_size = self_stack_size;
   node->global.stack_frame_offset = 0;

=== modified file 'gcc/tree-inline.h'
--- gcc/tree-inline.h	2009-09-14 18:18:58 +0000
+++ gcc/tree-inline.h	2010-11-24 08:43:48 +0000
@@ -187,6 +187,6 @@
 extern tree remap_type (tree type, copy_body_data *id);
 extern gimple_seq copy_gimple_seq_and_replace_locals (gimple_seq seq);
 
-extern HOST_WIDE_INT estimated_stack_frame_size (void);
+extern HOST_WIDE_INT estimated_stack_frame_size (tree);
 
 #endif /* GCC_TREE_INLINE_H */


Reply to: