* config/obj-elf.c (elf_begin): New function.
authorIan Lance Taylor <ian@airs.com>
Mon, 7 Oct 1996 15:25:58 +0000 (15:25 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 7 Oct 1996 15:25:58 +0000 (15:25 +0000)
(obj_elf_section): Add the section symbol to the symbol table.
* config/obj-elf.h (obj_begin): Define.
(elf_begin): Declare.
* as.c (perform_an_assembly_pass): Call obj_begin if it is
defined.

gas/ChangeLog
gas/as.c
gas/config/obj-elf.c
gas/config/obj-elf.h

index ba8bebd4b94ce7f005457792740d8b2382af8309..c13ce3262d569dc8e18321b34495812f425f2353 100644 (file)
@@ -1,3 +1,12 @@
+Mon Oct  7 11:24:29 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * config/obj-elf.c (elf_begin): New function.
+       (obj_elf_section): Add the section symbol to the symbol table.
+       * config/obj-elf.h (obj_begin): Define.
+       (elf_begin): Declare.
+       * as.c (perform_an_assembly_pass): Call obj_begin if it is
+       defined.
+
 Fri Oct  4 18:37:32 1996  Ian Lance Taylor  <ian@cygnus.com>
 
        * config/obj-coff.c (fixup_segment): Subtract the section address
index 21caa2009b73e9ed6562d8755f6913986f10b493..475fa8e8fc7814a7a8caf854d23e879ebf2b7a53 100644 (file)
--- a/gas/as.c
+++ b/gas/as.c
@@ -788,6 +788,10 @@ perform_an_assembly_pass (argc, argv)
      and sections already created, in BFD_ASSEMBLER mode.  */
   md_begin ();
 
+#ifdef obj_begin
+  obj_begin ();
+#endif
+
   argv++;                      /* skip argv[0] */
   argc--;                      /* skip argv[0] */
   while (argc--)
index 8797672f2097599fd41a989538bb8f4dcaf1ba1a..ffd66d12b7c9816f9e71cdd97ce8fae2327fe2d2 100644 (file)
@@ -136,6 +136,20 @@ static const pseudo_typeS ecoff_debug_pseudo_table[] =
 #undef NO_RELOC
 #include "aout/aout64.h"
 
+/* This is called when the assembler starts.  */
+
+void
+elf_begin ()
+{
+  /* Add symbols for the known sections to the symbol table.  */
+  symbol_table_insert (section_symbol (bfd_get_section_by_name (stdoutput,
+                                                               ".text")));
+  symbol_table_insert (section_symbol (bfd_get_section_by_name (stdoutput,
+                                                               ".data")));
+  symbol_table_insert (section_symbol (bfd_get_section_by_name (stdoutput,
+                                                               ".bss")));
+}
+
 void
 elf_pop_insert ()
 {
@@ -499,6 +513,7 @@ obj_elf_section (xxx)
   int type, attr;
   int i;
   flagword flags;
+  symbolS *secsym;
 
 #ifdef md_flush_pending_output
   md_flush_pending_output ();
@@ -731,24 +746,33 @@ obj_elf_section (xxx)
 
   flags = (SEC_RELOC
           | ((attr & SHF_WRITE) ? 0 : SEC_READONLY)
-          | ((attr & SHF_ALLOC) ? SEC_ALLOC | SEC_LOAD : 0)
+          | ((attr & SHF_ALLOC) ? SEC_ALLOC : 0)
+          | (((attr & SHF_ALLOC) && type != SHT_NOBITS) ? SEC_LOAD : 0)
           | ((attr & SHF_EXECINSTR) ? SEC_CODE : 0));
-
-  if (type == SHT_PROGBITS)
-    flags |= SEC_ALLOC | SEC_LOAD;
-  else if (type == SHT_NOBITS)
+  if (special_sections[i].name == NULL)
     {
-      flags |= SEC_ALLOC;
-      flags &=~ SEC_LOAD;
-    }
+      if (type == SHT_PROGBITS)
+       flags |= SEC_ALLOC | SEC_LOAD;
+      else if (type == SHT_NOBITS)
+       {
+         flags |= SEC_ALLOC;
+         flags &=~ SEC_LOAD;
+       }
 
 #ifdef md_elf_section_flags
-  if (special_sections[i].name == NULL)
-    flags = md_elf_section_flags (flags, attr, type);
+      flags = md_elf_section_flags (flags, attr, type);
 #endif
+    }
 
   bfd_set_section_flags (stdoutput, sec, flags);
 
+  /* Add a symbol for this section to the symbol table.  */
+  secsym = symbol_find (string);
+  if (secsym != NULL)
+    secsym->bsym = sec->symbol;
+  else
+    symbol_table_insert (section_symbol (sec));
+
 #ifdef md_elf_section_change_hook
   md_elf_section_change_hook ();
 #endif
index abd7a00cbd5ccf89d41f0410c1138a5ea72f471c..f6af69fa6c9bee201de504f53be461e4d339b6bc 100644 (file)
@@ -51,6 +51,9 @@
 #define TRUE  !FALSE
 #endif
 
+#define obj_begin() elf_begin ()
+extern void elf_begin PARAMS ((void));
+
 /* should be conditional on address size! */
 #define elf_symbol(asymbol) ((elf_symbol_type *)(&(asymbol)->the_bfd))
 
@@ -92,6 +95,11 @@ extern void obj_elf_version PARAMS ((int));
 extern void obj_elf_init_stab_section PARAMS ((segT));
 #define INIT_STAB_SECTION(seg) obj_elf_init_stab_section (seg)
 
+/* For now, always set ECOFF_DEBUGGING for an Alpha target.  */
+#ifdef TC_ALPHA
+#define ECOFF_DEBUGGING 1
+#endif
+
 /* For now, always set ECOFF_DEBUGGING for a MIPS target.  */
 #ifdef TC_MIPS
 #define ECOFF_DEBUGGING 1