aboutsummaryrefslogtreecommitdiff
path: root/gcc/varasm.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r--gcc/varasm.c34
1 files changed, 21 insertions, 13 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c
index df97f9e..bff916b 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -563,26 +563,34 @@ asm_output_aligned_bss (FILE *file, tree decl ATTRIBUTE_UNUSED,
/* Switch to the section for function DECL.
- If DECL is NULL_TREE, switch to the text section.
- ??? It's not clear that we will ever be passed NULL_TREE, but it's
- safer to handle it. */
+ If DECL is NULL_TREE, switch to the text section. We can be passed
+ NULL_TREE under some circumstances by dbxout.c at least. */
void
function_section (tree decl)
{
+ if (decl == NULL_TREE)
+ text_section ();
+ else
+ {
+ /* ??? Typical use of this function maybe shouldn't be looking
+ for unlikely blocks at all - in the event that an entire
+ function is going into the unlikely-execute section, that
+ should be reflected in its DECL_SECTION_NAME. */
+ rtx insns = cfun && cfun->emit ? get_insns () : 0;
+ bool unlikely = insns && scan_ahead_for_unlikely_executed_note (insns);
+
#ifdef USE_SELECT_SECTION_FOR_FUNCTIONS
- bool unlikely = scan_ahead_for_unlikely_executed_note (get_insns());
-
- targetm.asm_out.select_section (decl, unlikely, DECL_ALIGN (decl));
+ targetm.asm_out.select_section (decl, unlikely, DECL_ALIGN (decl));
#else
- if (scan_ahead_for_unlikely_executed_note (get_insns()))
- unlikely_text_section ();
- else if (decl != NULL_TREE
- && DECL_SECTION_NAME (decl) != NULL_TREE)
- named_section (decl, (char *) 0, 0);
- else
- text_section ();
+ if (unlikely)
+ unlikely_text_section ();
+ else if (DECL_SECTION_NAME (decl))
+ named_section (decl, 0, 0);
+ else
+ text_section ();
#endif
+ }
}
/* Switch to read-only data section associated with function DECL. */