From c1bd46a8d430b61e107263387190f1677a59f526 Mon Sep 17 00:00:00 2001 From: Douglas B Rupp Date: Fri, 14 Dec 2001 07:39:08 -0500 Subject: [PATCH] alpha.c (vms_attribute_table): Add new attributes. * config/alpha/alpha.c (vms_attribute_table): Add new attributes. (alpha_write_linkage): Test for null alpha_links. (SECTION_VMS_GLOBAL, SECTION_VMS_INITIALIZE): New section attributes. (vms_section_type_flags, vms_asm_named_section): Handle them. From-SVN: r48000 --- gcc/ChangeLog | 7 +++++++ gcc/config/alpha/alpha.c | 38 ++++++++++++++++++++++++++++---------- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 71453bb1268..f3809bd537e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Fri Dec 14 07:29:52 2001 Douglas B. Rupp + + * config/alpha/alpha.c (vms_attribute_table): Add new attributes. + (alpha_write_linkage): Test for null alpha_links. + (SECTION_VMS_GLOBAL, SECTION_VMS_INITIALIZE): New section attributes. + (vms_section_type_flags, vms_asm_named_section): Handle them. + Fri Dec 14 12:05:14 CET 2001 Jan Hubicka * i386.c (ix86_fpmath, ix86_fpmath_string): New. diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index 1120bfb9599..7dcb4a6bc4d 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -5804,8 +5804,10 @@ alpha_using_fp () const struct attribute_spec vms_attribute_table[] = { /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ - { "overlaid", 0, 0, true, false, false, NULL }, - { NULL, 0, 0, false, false, false, NULL } + { "overlaid", 0, 0, true, false, false, NULL }, + { "global", 0, 0, true, false, false, NULL }, + { "initialize", 0, 0, true, false, false, NULL }, + { NULL, 0, 0, false, false, false, NULL } }; #endif @@ -7955,15 +7957,20 @@ void alpha_write_linkage (stream) FILE *stream; { - readonly_section (); - fprintf (stream, "\t.align 3\n"); - splay_tree_foreach (alpha_links, alpha_write_one_linkage, stream); + if (alpha_links) + { + readonly_section (); + fprintf (stream, "\t.align 3\n"); + splay_tree_foreach (alpha_links, alpha_write_one_linkage, stream); + } } /* Given a decl, a section name, and whether the decl initializer has relocs, choose attributes for the section. */ #define SECTION_VMS_OVERLAY SECTION_FORGET +#define SECTION_VMS_GLOBAL SECTION_MACH_DEP +#define SECTION_VMS_INITIALIZE (SECTION_VMS_GLOBAL << 1) static unsigned int vms_section_type_flags (decl, name, reloc) @@ -7976,6 +7983,12 @@ vms_section_type_flags (decl, name, reloc) if (decl && DECL_ATTRIBUTES (decl) && lookup_attribute ("overlaid", DECL_ATTRIBUTES (decl))) flags |= SECTION_VMS_OVERLAY; + if (decl && DECL_ATTRIBUTES (decl) + && lookup_attribute ("global", DECL_ATTRIBUTES (decl))) + flags |= SECTION_VMS_GLOBAL; + if (decl && DECL_ATTRIBUTES (decl) + && lookup_attribute ("initialize", DECL_ATTRIBUTES (decl))) + flags |= SECTION_VMS_INITIALIZE; return flags; } @@ -7989,14 +8002,19 @@ vms_asm_named_section (name, flags) const char *name; unsigned int flags; { - const char *flag_str = ""; + fputc ('\n', asm_out_file); + fprintf (asm_out_file, ".section\t%s", name); if (flags & SECTION_VMS_OVERLAY) - flag_str = ",OVR"; - else if (flags & SECTION_DEBUG) - flag_str = ",NOWRT"; + fprintf (asm_out_file, ",OVR"); + if (flags & SECTION_VMS_GLOBAL) + fprintf (asm_out_file, ",GBL"); + if (flags & SECTION_VMS_INITIALIZE) + fprintf (asm_out_file, ",NOMOD"); + if (flags & SECTION_DEBUG) + fprintf (asm_out_file, ",NOWRT"); - fprintf (asm_out_file, ".section\t%s%s\n", name, flag_str); + fputc ('\n', asm_out_file); } /* Record an element in the table of global constructors. SYMBOL is