This patch adds a new flag to mark sections as exclude sections. Such sections will be discarded by the linker. Also, mark .gnu.callgraph sections which store the callgraph edge profile info as exclude sections.
I also want the SECTION_EXCLUDE part alone to be considered for trunk. Index: final.c =================================================================== --- final.c (revision 179104) +++ final.c (working copy) @@ -4428,7 +4428,7 @@ rest_of_handle_final (void) && cgraph_node (current_function_decl) != NULL && (cgraph_node (current_function_decl))->callees != NULL) { - flags = SECTION_DEBUG; + flags = SECTION_DEBUG | SECTION_EXCLUDE; asprintf (&profile_fnname, ".gnu.callgraph.text.%s", fnname); switch_to_section (get_section (profile_fnname, flags, NULL)); fprintf (asm_out_file, "\t.string \"Function %s\"\n", fnname); Index: varasm.c =================================================================== --- varasm.c (revision 179098) +++ varasm.c (working copy) @@ -6191,6 +6191,8 @@ default_elf_asm_named_section (const char *name, u if (!(flags & SECTION_DEBUG)) *f++ = 'a'; + if (flags & SECTION_EXCLUDE) + *f++ = 'e'; if (flags & SECTION_WRITE) *f++ = 'w'; if (flags & SECTION_CODE) Index: output.h =================================================================== --- output.h (revision 179098) +++ output.h (working copy) @@ -443,6 +443,7 @@ extern void no_asm_to_stream (FILE *); #define SECTION_COMMON 0x800000 /* contains common data */ #define SECTION_RELRO 0x1000000 /* data is readonly after relocation processing */ #define SECTION_MACH_DEP 0x2000000 /* subsequent bits reserved for target */ +#define SECTION_EXCLUDE 0x4000000 /* discarded by the linker */ /* This SECTION_STYLE is used for unnamed sections that we can switch to using a special assembler directive. */ -- This patch is available for review at http://codereview.appspot.com/5126041