* subsegs.c (subsegs_begin): create bss0_frchainP in the same was
[deliverable/binutils-gdb.git] / gas / subsegs.c
index e872a83f063bd7554654e4e3ee9e5df52c070f98..5ef9570df779d3a6c1424b17d7491517472a9828 100644 (file)
@@ -1,5 +1,5 @@
 /* subsegs.c - subsegments -
-   Copyright (C) 1987, 1990, 1991 Free Software Foundation, Inc.
+   Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc.
    
    This file is part of GAS, the GNU Assembler.
    
@@ -35,7 +35,8 @@ frchainS*     frchain_root,
 #else
 frchainS*      frchain_root,
     *  frchain_now,    /* Commented in "subsegs.h". */
-    *  data0_frchainP;
+    *  data0_frchainP,
+ * bss0_frchainP;
 
 #endif
 char * const /* in: segT   out: char* */
@@ -108,6 +109,10 @@ void
 #else
        subseg_new (SEG_DATA, 0);       /* .data 0 */
        data0_frchainP = frchain_now;
+
+       subseg_new (SEG_BSS, 0);
+       bss0_frchainP = frchain_now;
+
 #endif
        
 }
@@ -138,12 +143,16 @@ register int      subseg;
                    seg_fix_rootP = & data_fix_root;
                    seg_fix_tailP = & data_fix_tail;
            }
-       else
+       else if (seg == SEG_TEXT)
            {
-                   know (seg == SEG_TEXT);
                    seg_fix_rootP = & text_fix_root;
                    seg_fix_tailP = & text_fix_tail;
            }
+       else {
+                   know (seg == SEG_BSS);
+                   seg_fix_rootP = & bss_fix_root;
+                   seg_fix_tailP = & bss_fix_tail;
+           }
 #endif
 }
 \f
@@ -165,12 +174,23 @@ register int      subseg;
 
 void
     subseg_new (seg, subseg)   /* begin assembly for a new sub-segment */
-register segT  seg;    /* SEG_DATA or SEG_TEXT */
+register segT  seg; /* SEG_DATA or SEG_TEXT */
 register subsegT       subseg;
 {
        long tmp;               /* JF for obstack alignment hacking */
 #ifndef MANY_SEGMENTS
-       know( seg == SEG_DATA || seg == SEG_TEXT );
+       know(seg == SEG_DATA || seg == SEG_TEXT || seg == SEG_BSS);
+#endif
+#ifdef OBJ_AOUT
+/* If -R specifed, always put stuff into the data section */
+       if (flagseen['R']) 
+       {
+         if (seg == SEG_DATA) 
+         {
+           subseg += 1000;
+           seg = SEG_TEXT;
+         }
+       }
 #endif
        if (seg != now_seg || subseg != now_subseg)
            {                           /* we just changed sub-segments */
@@ -304,4 +324,4 @@ register subsegT    subseg;
  * End:
  */
 
-/* end: subsegs.c */
+/* end of subsegs.c */
This page took 0.024875 seconds and 4 git commands to generate.