1999-09-11 Donn Terry <donn@interix.com>
authorIan Lance Taylor <ian@airs.com>
Sun, 12 Sep 1999 02:49:28 +0000 (02:49 +0000)
committerIan Lance Taylor <ian@airs.com>
Sun, 12 Sep 1999 02:49:28 +0000 (02:49 +0000)
* config/obj-coff.c (obj_coff_endef) [BFD_ASSEMBLER]: Handle .ef
C_FCN symbol differently if TE_PE.
(obj_coff_line) [BFD_ASSEMBLER]: Always use the line number which
appears in the pseudo-op, rather coff_line_base which is only set
for a .bf symbol.

gas/ChangeLog
gas/config/obj-coff.c

index 29ba1db6263ab9b7ab392b3eeffff26e33c04621..a2515b3a2bb03369f7023c2d972efe1970df70fc 100644 (file)
@@ -5,6 +5,12 @@
 
 1999-09-11  Donn Terry  <donn@interix.com>
 
+       * config/obj-coff.c (obj_coff_endef) [BFD_ASSEMBLER]: Handle .ef
+       C_FCN symbol differently if TE_PE.
+       (obj_coff_line) [BFD_ASSEMBLER]: Always use the line number which
+       appears in the pseudo-op, rather coff_line_base which is only set
+       for a .bf symbol.
+
        * config/obj-coff.c (obj_coff_loc): New static function.
        (obj_pseudo_table): Add "loc".
 
index b488cdf0fd6330583d3128e0619b24a2d32e0adc..6be91336b17406bf38f8da815dc7f6d3546c4a21 100644 (file)
@@ -659,14 +659,30 @@ obj_coff_endef (ignore)
        S_SET_SEGMENT (def_symbol_in_progress, text_section);
 
        name = S_GET_NAME (def_symbol_in_progress);
-       if (name[1] == 'b' && name[2] == 'f')
-         {
-           if (! in_function ())
-             as_warn (_("`%s' symbol without preceding function"), name);
-/*         SA_SET_SYM_LNNO (def_symbol_in_progress, 12345);*/
-           /* Will need relocating */
-           SF_SET_PROCESS (def_symbol_in_progress);
-           clear_function ();
+       if (name[0] == '.' && name[2] == 'f' && name[3] == '\0')
+         {
+           switch (name[1])
+             {
+             case 'b':  
+               /* .bf */
+               if (! in_function ())
+                 as_warn (_("`%s' symbol without preceding function"), name);
+               /* Will need relocating.  */
+               SF_SET_PROCESS (def_symbol_in_progress);
+               clear_function ();
+               break;
+#ifdef TE_PE
+             case 'e':  
+               /* .ef */
+               /* The MS compilers output the actual endline, not the
+                  function-relative one... we want to match without
+                  changing the assembler input.  */
+               SA_SET_SYM_LNNO (def_symbol_in_progress, 
+                                (SA_GET_SYM_LNNO (def_symbol_in_progress)
+                                 + coff_line_base));
+               break;
+#endif
+             }
          }
       }
       break;
@@ -856,7 +872,7 @@ obj_coff_line (ignore)
     coff_line_base = this_base;
 
   S_SET_NUMBER_AUXILIARY (def_symbol_in_progress, 1);
-  SA_SET_SYM_LNNO (def_symbol_in_progress, coff_line_base);
+  SA_SET_SYM_LNNO (def_symbol_in_progress, this_base);
 
   demand_empty_rest_of_line ();
 
@@ -866,7 +882,7 @@ obj_coff_line (ignore)
       extern int listing;
 
       if (listing)
-       listing_source_line ((unsigned int) coff_line_base);
+       listing_source_line ((unsigned int) this_base);
     }
 #endif
 }