From a8c01a592b48327c4555a1352fef9d79982b983d Mon Sep 17 00:00:00 2001 From: Robert Lipe Date: Mon, 8 Oct 2001 22:41:55 +0000 Subject: varasm.c (struct in_named_entry): Add declared. * varasm.c (struct in_named_entry): Add declared. (named_section_first_declaration): New function. (default_elf_asm_named_section): Use it. * output.h (named_section_first_declaration): New. From-SVN: r46108 --- gcc/varasm.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'gcc/varasm.c') diff --git a/gcc/varasm.c b/gcc/varasm.c index d2a59d8..cc79f20 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -216,6 +216,7 @@ struct in_named_entry { const char *name; unsigned int flags; + bool declared; }; static htab_t in_named_htab; @@ -340,6 +341,31 @@ get_named_section_flags (section) return slot ? (*slot)->flags : 0; } +/* Returns true if the section has been declared before. Sets internal + flag on this section in in_named_hash so subsequent calls on this + section will return false. */ + +bool +named_section_first_declaration (name) + const char *name; +{ + struct in_named_entry **slot; + + slot = (struct in_named_entry**) + htab_find_slot_with_hash (in_named_htab, name, + htab_hash_string (name), NO_INSERT); + if (! (*slot)->declared) + { + (*slot)->declared = true; + return true; + } + else + { + return false; + } +} + + /* Record FLAGS for SECTION. If SECTION was previously recorded with a different set of flags, return false. */ @@ -5205,6 +5231,12 @@ default_elf_asm_named_section (name, flags) char flagchars[10], *f = flagchars; const char *type; + if (! named_section_first_declaration (name)) + { + fprintf (asm_out_file, "\t.section\t%s\n", name); + return; + } + if (!(flags & SECTION_DEBUG)) *f++ = 'a'; if (flags & SECTION_WRITE) -- cgit v1.1