Instead of changing the names of .bss etc, add .vubss etc via
authorJames Lemke <jlemke@cygnus>
Mon, 23 Feb 1998 22:27:12 +0000 (22:27 +0000)
committerJames Lemke <jlemke@cygnus>
Mon, 23 Feb 1998 22:27:12 +0000 (22:27 +0000)
the macro ELF_TC_SPECIAL_SECTIONS.  As per Ian's suggestion.

gas/ChangeLog
gas/config/obj-elf.c
gas/config/tc-dvp.h

index 4672069516fd71e6d2f36f74c282d6c3a9aae37c..74da07b06acc448880598ec7fa634d67ad3b9592 100644 (file)
@@ -1,3 +1,10 @@
+Mon Feb 23 17:24:06 1998  Jim Lemke  <jlemke@cygnus.com>
+
+       * config/obj-elf.c: Take Ian's suggestion, leave .bss etc
+       in special_sections table and add .vubss etc via
+       ELF_TC_SPECIAL_SECTIONS.
+       * config/tc-dvp.h: Likewise.
+
 Mon Feb 23 11:29:06 1998  Doug Evans  <devans@seba.cygnus.com>
 
        * cgen.c: #include symcat.h.
index c861d5445192b02f1a1ac1cd2dc13912b17dcdc6..fc3921d2200708dd4d38437f639d27d09ccc4878 100644 (file)
@@ -65,6 +65,7 @@ static void obj_elf_common PARAMS ((int));
 static void obj_elf_symver PARAMS ((int));
 static void obj_elf_data PARAMS ((int));
 static void obj_elf_text PARAMS ((int));
+static void obj_elf_subsection PARAMS ((int));
 
 static const pseudo_typeS elf_pseudo_table[] =
 {
@@ -87,6 +88,9 @@ static const pseudo_typeS elf_pseudo_table[] =
   /* This is a GNU extension to handle symbol versions.  */
   {"symver", obj_elf_symver, 0},
 
+  /* A GNU extension to change subsection only.  */
+  {"subsection", obj_elf_subsection, 0},
+
   /* These are used for dwarf. */
   {"2byte", cons, 2},
   {"4byte", cons, 4},
@@ -155,11 +159,11 @@ elf_begin ()
 {
   /* Add symbols for the known sections to the symbol table.  */
   symbol_table_insert (section_symbol (bfd_get_section_by_name (stdoutput,
-                                                               ".text")));
+                                                               TEXT_SECTION_NAME)));
   symbol_table_insert (section_symbol (bfd_get_section_by_name (stdoutput,
-                                                               ".data")));
+                                                               DATA_SECTION_NAME)));
   symbol_table_insert (section_symbol (bfd_get_section_by_name (stdoutput,
-                                                               ".bss")));
+                                                               BSS_SECTION_NAME)));
 }
 
 void
@@ -617,6 +621,7 @@ obj_elf_section (xxx)
       ++input_line_pointer;
 
       SKIP_WHITESPACE ();
+
       if (*input_line_pointer == '"')
        {
          /* Pick up a string with a combination of a, w, x.  */
@@ -699,7 +704,7 @@ obj_elf_section (xxx)
              SKIP_WHITESPACE ();
              if (*input_line_pointer != '#')
                {
-                 as_warn ("Bad .section directive");
+                 as_warn ("Bad .section directive - character following name is not '#'");
                  ignore_rest_of_line ();
                  return;
                }
@@ -845,6 +850,28 @@ obj_elf_text (i)
 #endif
 }
 
+static void
+obj_elf_subsection (ignore)
+     int ignore;
+{
+  register int temp;
+
+#ifdef md_flush_pending_output
+  md_flush_pending_output ();
+#endif
+
+  previous_section = now_seg;
+  previous_subsection = now_subseg;
+
+  temp = get_absolute_expression ();
+  subseg_set (now_seg, (subsegT) temp);
+  demand_empty_rest_of_line ();
+
+#ifdef md_elf_section_change_hook
+  md_elf_section_change_hook ();
+#endif
+}
+
 /* This can be called from the processor backends if they change
    sections.  */
 
@@ -1373,10 +1400,17 @@ elf_frob_symbol (symp, puntp)
 
 #ifdef TC_MIPS
   /* The Irix 5 and 6 assemblers set the type of any common symbol and
-     any undefined non-function symbol to STT_OBJECT.  We try to be compatible,
-     since newer Irix 5 and 6 linkers care.  */
-  if (S_IS_COMMON (symp)
-      || (! S_IS_DEFINED (symp) && ((symp->bsym->flags & BSF_FUNCTION) == 0)))
+     any undefined non-function symbol to STT_OBJECT.  We try to be
+     compatible, since newer Irix 5 and 6 linkers care.  However, we
+     only set undefined symbols to be STT_OBJECT if we are on Irix,
+     because that is the only time gcc will generate the necessary
+     .global directives to mark functions.  */
+
+  if (S_IS_COMMON (symp))
+    symp->bsym->flags |= BSF_OBJECT;
+
+  if (strstr (TARGET_OS, "irix") != NULL
+      && (! S_IS_DEFINED (symp) && ((symp->bsym->flags & BSF_FUNCTION) == 0)))
     symp->bsym->flags |= BSF_OBJECT;
 #endif
 
index 9e0f6f2b307a2b989c4a959cb44bd2c435abee18..39fcab10178235c6f81ae233d65e12908bbfe9fa 100644 (file)
 #define MD_APPLY_FIX3
 
 #define TC_HANDLES_FX_DONE
+
+/* Called after parsing a file.  */
+#define md_after_pass_hook() dvp_parse_done ()
+
+/* Default section names. */
+#define TEXT_SECTION_NAME      ".vutext"
+#define DATA_SECTION_NAME      ".vudata"
+#define BSS_SECTION_NAME       ".vubss"
+
+#define ELF_TC_SPECIAL_SECTIONS \
+  { ".vubss",  SHT_NOBITS,     SHF_ALLOC + SHF_WRITE           }, \
+  { ".vudata", SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE           }, \
+  { ".vutext", SHT_PROGBITS,   SHF_ALLOC + SHF_EXECINSTR       },
+