From 8642cce86a850b9aa0c2fed31f29c9ca2cabd1c4 Mon Sep 17 00:00:00 2001 From: Tom Rix Date: Mon, 8 Oct 2001 18:14:43 +0000 Subject: [PATCH] Fix 2 xcoff line number problems --- gas/ChangeLog | 6 ++++++ gas/config/obj-coff.c | 3 ++- gas/config/tc-ppc.c | 22 ++++++++++++++++++++-- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index cbf955e31b..efe13df9b6 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2001-10-08 Tom Rix + + * config/tc-ppc (ppc_bf, ppc_biei) : Set first .bi lineno value to + location of next .bf + * config/obj-coff.c (coff_frob_symbol) : XCOFF does not use endndx. + 2001-10-07 Alan Modra * config/obj-elf.c: Standardize error/warning messages - don't diff --git a/gas/config/obj-coff.c b/gas/config/obj-coff.c index 6c7cc59c93..90c77fbb1d 100644 --- a/gas/config/obj-coff.c +++ b/gas/config/obj-coff.c @@ -1309,6 +1309,7 @@ coff_frob_symbol (symp, punt) set_end = next_set_end; } +#ifndef OBJ_XCOFF if (! *punt && S_GET_STORAGE_CLASS (symp) == C_FCN && strcmp (S_GET_NAME (symp), ".bf") == 0) @@ -1317,7 +1318,7 @@ coff_frob_symbol (symp, punt) SA_SET_SYM_ENDNDX (coff_last_bf, symp); coff_last_bf = symp; } - +#endif if (coffsymbol (symbol_get_bfdsym (symp))->lineno) { int i; diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index ff63dfc648..ef4341fe53 100644 --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -3168,7 +3168,10 @@ ppc_function (ignore) } /* The .bf pseudo-op. This is just like a COFF C_FCN symbol named - ".bf". */ + ".bf". If the pseudo op .bi was seen before .bf, patch the .bi sym + with the correct line number */ + +static symbolS *saved_bi_sym = 0; static void ppc_bf (ignore) @@ -3187,6 +3190,14 @@ ppc_bf (ignore) S_SET_NUMBER_AUXILIARY (sym, 1); SA_SET_SYM_LNNO (sym, coff_line_base); + /* Line number for bi. */ + if (saved_bi_sym) + { + S_SET_VALUE (saved_bi_sym, coff_n_line_nos); + saved_bi_sym = 0; + } + + symbol_get_tc (sym)->output = 1; ppc_frob_label (sym); @@ -3220,7 +3231,8 @@ ppc_ef (ignore) /* The .bi and .ei pseudo-ops. These take a string argument and generates a C_BINCL or C_EINCL symbol, which goes at the start of - the symbol list. */ + the symbol list. The value of .bi will be know when the next .bf + is encountered. */ static void ppc_biei (ei) @@ -3250,6 +3262,12 @@ ppc_biei (ei) S_SET_STORAGE_CLASS (sym, ei ? C_EINCL : C_BINCL); symbol_get_tc (sym)->output = 1; + /* Save bi. */ + if (ei) + saved_bi_sym = 0; + else + saved_bi_sym = sym; + for (look = last_biei ? last_biei : symbol_rootP; (look != (symbolS *) NULL && (S_GET_STORAGE_CLASS (look) == C_FILE -- 2.34.1