From ae9fd6b7cd6ab8d777612aa1b721a8c3112e2c5e Mon Sep 17 00:00:00 2001
From: Jan Hubicka <jh@suse.cz>
Date: Tue, 14 Dec 2010 14:07:05 +0100
Subject: [PATCH] re PR middle-end/46667 (-freorder-blocks-and-partition -g
 failed and libstdc++ builds for arm-eabi are broken.)

	PR middle-end/46667
	* varasm.c (assemble_start_function): Do not call resolve_unique_section.
	* cfgexpand.c (gimple_expand_cfg): Resolve it here.

From-SVN: r167795
---
 gcc/ChangeLog   | 6 ++++++
 gcc/cfgexpand.c | 4 ++++
 gcc/varasm.c    | 2 --
 3 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 78ca0480a21a..c99b9314785e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2010-12-14  Jan Hubicka  <jh@suse.cz>
+
+	PR middle-end/46667
+	* varasm.c (assemble_start_function): Do not call resolve_unique_section.
+	* cfgexpand.c (gimple_expand_cfg): Resolve it here.
+
 2010-12-14  Alexander Monakov  <amonakov@ispras.ru>
 
 	PR rtl-optimization/46875
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 0ab06ead9f27..6cc5d01912fc 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -3951,6 +3951,10 @@ gimple_expand_cfg (void)
   crtl->preferred_stack_boundary = STACK_BOUNDARY;
   cfun->cfg->max_jumptable_ents = 0;
 
+  /* Resovle the function section.  Some targets, like ARM EABI rely on knowledge
+     of the function section at exapnsion time to predict distance of calls.  */
+  resolve_unique_section (current_function_decl, 0, flag_function_sections);
+
   /* Expand the variables recorded during gimple lowering.  */
   timevar_push (TV_VAR_EXPAND);
   start_sequence ();
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 891d4e06e572..ed44610ddf18 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -1551,8 +1551,6 @@ assemble_start_function (tree decl, const char *fnname)
   if (CONSTANT_POOL_BEFORE_FUNCTION)
     output_constant_pool (fnname, decl);
 
-  resolve_unique_section (decl, 0, flag_function_sections);
-
   /* Make sure the not and cold text (code) sections are properly
      aligned.  This is necessary here in the case where the function
      has both hot and cold sections, because we don't want to re-set
-- 
GitLab