aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDoug Evans <dje@gnu.org>1995-02-13 22:08:43 +0000
committerDoug Evans <dje@gnu.org>1995-02-13 22:08:43 +0000
commit4d1065ed1b3ec80edaa39bcb1b302b7cc0d1f2cb (patch)
tree7bd2f95374619b6a13422a2c5117a19e9e8daf02 /gcc
parent2c62c124a78fee391c2742578af8faf233ecbb4f (diff)
downloadgcc-4d1065ed1b3ec80edaa39bcb1b302b7cc0d1f2cb.zip
gcc-4d1065ed1b3ec80edaa39bcb1b302b7cc0d1f2cb.tar.gz
gcc-4d1065ed1b3ec80edaa39bcb1b302b7cc0d1f2cb.tar.bz2
varasm.c (function_section): New function.
* varasm.c (function_section): New function. (assemble_start_function): Call it. * output.h (function_section): Declare it. * final.c (final_scan_insn): Call function_section instead of text_section. * dwarfout.c (dwarfout_begin_block): Likewise. (dwarfout_end_block): Likewise. (dwarfout_label): Likewise. (dwarfout_begin_function): Likewise. (dwarfout_end_function): Likewise. (dwarfout_line): Likewise. From-SVN: r8942
Diffstat (limited to 'gcc')
-rw-r--r--gcc/dwarfout.c12
-rw-r--r--gcc/final.c4
-rw-r--r--gcc/output.h3
-rw-r--r--gcc/varasm.c22
4 files changed, 29 insertions, 12 deletions
diff --git a/gcc/dwarfout.c b/gcc/dwarfout.c
index 4287e10..3ebff01 100644
--- a/gcc/dwarfout.c
+++ b/gcc/dwarfout.c
@@ -4923,7 +4923,7 @@ dwarfout_begin_block (blocknum)
{
char label[MAX_ARTIFICIAL_LABEL_BYTES];
- text_section ();
+ function_section (current_function_decl);
sprintf (label, BLOCK_BEGIN_LABEL_FMT, blocknum);
ASM_OUTPUT_LABEL (asm_out_file, label);
}
@@ -4937,7 +4937,7 @@ dwarfout_end_block (blocknum)
{
char label[MAX_ARTIFICIAL_LABEL_BYTES];
- text_section ();
+ function_section (current_function_decl);
sprintf (label, BLOCK_END_LABEL_FMT, blocknum);
ASM_OUTPUT_LABEL (asm_out_file, label);
}
@@ -4953,7 +4953,7 @@ dwarfout_label (insn)
{
char label[MAX_ARTIFICIAL_LABEL_BYTES];
- text_section ();
+ function_section (current_function_decl);
sprintf (label, INSN_LABEL_FMT, current_funcdef_number,
(unsigned) INSN_UID (insn));
ASM_OUTPUT_LABEL (asm_out_file, label);
@@ -4969,7 +4969,7 @@ dwarfout_begin_function ()
{
char label[MAX_ARTIFICIAL_LABEL_BYTES];
- text_section ();
+ function_section (current_function_decl);
sprintf (label, BODY_BEGIN_LABEL_FMT, current_funcdef_number);
ASM_OUTPUT_LABEL (asm_out_file, label);
}
@@ -4982,7 +4982,7 @@ dwarfout_end_function ()
{
char label[MAX_ARTIFICIAL_LABEL_BYTES];
- text_section ();
+ function_section (current_function_decl);
sprintf (label, BODY_END_LABEL_FMT, current_funcdef_number);
ASM_OUTPUT_LABEL (asm_out_file, label);
}
@@ -5156,7 +5156,7 @@ dwarfout_line (filename, line)
static unsigned prev_file_entry_num = (unsigned) -1;
register unsigned this_file_entry_num = lookup_filename (filename);
- text_section ();
+ function_section (current_function_decl);
sprintf (label, LINE_CODE_LABEL_FMT, ++last_line_entry_num);
ASM_OUTPUT_LABEL (asm_out_file, label);
diff --git a/gcc/final.c b/gcc/final.c
index 5d62c92..c086dd0 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -1511,7 +1511,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
/ BITS_PER_UNIT));
#endif /* READONLY_DATA_SECTION */
#else /* JUMP_TABLES_IN_TEXT_SECTION */
- text_section ();
+ function_section (current_function_decl);
#endif /* JUMP_TABLES_IN_TEXT_SECTION */
#ifdef ASM_OUTPUT_CASE_LABEL
ASM_OUTPUT_CASE_LABEL (file, "L", CODE_LABEL_NUMBER (insn),
@@ -1600,7 +1600,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
insn);
#endif
- text_section ();
+ function_section (current_function_decl);
break;
}
diff --git a/gcc/output.h b/gcc/output.h
index 7922d64..c1a8ae6 100644
--- a/gcc/output.h
+++ b/gcc/output.h
@@ -136,6 +136,9 @@ extern int in_text_section PROTO((void));
If NAME is NULL, get the name from DECL. */
extern void named_section PROTO((tree, char *));
+/* Tell assembler to switch to the section for function DECL. */
+extern void function_section PROTO((tree));
+
/* Create the rtl to represent a function, for a function definition.
DECL is a FUNCTION_DECL node which describes which function.
The rtl is stored into DECL. */
diff --git a/gcc/varasm.c b/gcc/varasm.c
index a89de1a..9091023 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -244,6 +244,23 @@ named_section (decl, name)
#endif
}
}
+
+/* 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. */
+
+void
+function_section (decl)
+ tree decl;
+{
+ if (decl != NULL_TREE
+ && DECL_SECTION_NAME (decl) != NULL_TREE)
+ named_section (decl, (char *) 0);
+ else
+ text_section ();
+}
/* Create the rtl to represent a function, for a function definition.
DECL is a FUNCTION_DECL node which describes which function.
@@ -733,10 +750,7 @@ assemble_start_function (decl, fnname)
output_constant_pool (fnname, decl);
- if (IN_NAMED_SECTION (decl))
- named_section (decl, NULL);
- else
- text_section ();
+ function_section (decl);
/* Tell assembler to move to target machine's alignment for functions. */
align = floor_log2 (FUNCTION_BOUNDARY / BITS_PER_UNIT);