diff options
author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1996-04-15 07:46:10 +0000 |
---|---|---|
committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1996-04-15 07:46:10 +0000 |
commit | f6e3ef26b4812d7773a4640c5f5b7c798b25d519 (patch) | |
tree | 5ae566bfe100fa103dfabae70dc5d0eed68cc6b3 /gcc/varasm.c | |
parent | 48aa0bc81ab90615fbe726cbeeb1a63f0fbc81ef (diff) | |
download | gcc-f6e3ef26b4812d7773a4640c5f5b7c798b25d519.tar.gz |
* flags.h (flag_function_sections): Declare.
* toplev.c (flag_function_sections): Define.
(compile_file): Add warnings when -ffunction-sections is
used with -g, or profiling. Disable -ffunction-sections
when profiling is used. Add warning when -ffunction-sections
is used on a target that doesn't support it.
* varasm.c (named_section): Make a copy of the section name
in case the original is in temporary storage.
(function_section): Set DECL_SECTION_NAME for each function
if flag_function_sections is on and the target supports it.
* dbxout.c (dbxout_function_end): New function.
(dbxout_function): Call dbxout_function_end if using extensions
and flag_function_sections is on.
* sparc/sysv4.h (ASM_OUTPUT_SECTION_NAME): Prefix a function
section's name with ".text%" when -ffunction-sections.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@11774 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r-- | gcc/varasm.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c index 9b831100124..cc60f03fec1 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -255,7 +255,8 @@ named_section (decl, name) if (in_section != in_named || strcmp (name, in_named_name)) { - in_named_name = name; + in_named_name = obstack_alloc (&permanent_obstack, strlen (name) + 1); + strcpy (in_named_name, name); in_section = in_named; #ifdef ASM_OUTPUT_SECTION_NAME @@ -349,6 +350,29 @@ void function_section (decl) tree decl; { + +#ifdef ASM_OUTPUT_SECTION_NAME + /* If we are placing functions into their own sections, and this + function doesn't already have a section specified, set it now. */ + if (flag_function_sections + && decl != NULL_TREE + && DECL_SECTION_NAME (decl) == NULL_TREE) + { + int len; + char *string; + + len = IDENTIFIER_LENGTH (DECL_ASSEMBLER_NAME (decl)) + 1; + string = alloca (len); + strcpy (string, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))); + + /* Strip off any encoding in fnname. */ + STRIP_NAME_ENCODING (string, string); + + /* Set DECL_SECTION_NAME. */ + DECL_SECTION_NAME (decl) = build_string (len, string); + } +#endif + if (decl != NULL_TREE && DECL_SECTION_NAME (decl) != NULL_TREE) named_section (decl, (char *) 0); |