aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/obj-coff.c36
2 files changed, 32 insertions, 10 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 29ba1db..a2515b3 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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".
diff --git a/gas/config/obj-coff.c b/gas/config/obj-coff.c
index b488cdf..6be9133 100644
--- a/gas/config/obj-coff.c
+++ b/gas/config/obj-coff.c
@@ -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
}