diff options
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r-- | gcc/varasm.c | 34 |
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. */ |