alpha.c (vms_attribute_table): Add new attributes.
authorDouglas B Rupp <rupp@gnat.com>
Fri, 14 Dec 2001 12:39:08 +0000 (07:39 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 14 Dec 2001 12:39:08 +0000 (07:39 -0500)
* 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
gcc/config/alpha/alpha.c

index 71453bb12680569485eec9e532ecea4c86ec2cb1..f3809bd537ee3b648572909222e64c6915fae1c2 100644 (file)
@@ -1,3 +1,10 @@
+Fri Dec 14 07:29:52 2001  Douglas B. Rupp  <rupp@gnat.com>
+
+       * 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  <jh@suse.cz>
 
        * i386.c (ix86_fpmath, ix86_fpmath_string): New.
index 1120bfb95995b66014ce5db5cc026d47111f9f88..7dcb4a6bc4dd51f03bad8583293c1bea4aec06e0 100644 (file)
@@ -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, ".section\t%s%s\n", name, flag_str);
+    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");
+
+  fputc ('\n', asm_out_file);
 }
 
 /* Record an element in the table of global constructors.  SYMBOL is