Pass finalize_syms on calls to resolve_symbol_value.

This commit is contained in:
Alan Modra 2001-03-30 07:07:11 +00:00
parent 0529cb8781
commit 1a5447b835
10 changed files with 36 additions and 22 deletions

View file

@ -1,6 +1,18 @@
2001-03-30 Alan Modra <alan@linuxcare.com.au>
* dwarf2dbg.c (dwarf2_directive_file): Fix warnings.
(dwarf2dbg_convert_frag): Pass `finalize_syms' to resolve_symbol_value.
* config/obj-aout.c (obj_crawl_symbol_chain): Likewise.
* config/obj-bout.c (obj_crawl_symbol_chain): Likewise.
* config/obj-coff.c (do_relocs_for): Likewise.
(yank_symbols): Likewise.
(fixup_segment): Likewise.
* config/tc-ppc.c (ppc_frob_symbol): Likewise.
(ppc_fix_adjustable): Likewise.
* config/tc-mips.c (md_convert_frag): Likewise.
* config/obj-vms.c (obj_crawl_symbol_chain): Likewise.
* ehopt.c (eh_frame_convert_frag): Likewise.
* expr.c (make_expr_symbol): Likewise.
* frags.h (struct frag): Add last_fr_address. Reorder fields for
better packing.

View file

@ -1,5 +1,5 @@
/* a.out object file format
Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000
Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000, 2001
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@ -466,7 +466,7 @@ obj_crawl_symbol_chain (headers)
S_SET_SEGMENT (symbolP, SEG_TEXT);
} /* if pusing data into text */
resolve_symbol_value (symbolP, 1);
resolve_symbol_value (symbolP, finalize_syms);
/* Skip symbols which were equated to undefined or common
symbols. */

View file

@ -1,5 +1,5 @@
/* b.out object file format
Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1996, 2000
Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1996, 2000, 2001
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@ -260,7 +260,7 @@ obj_crawl_symbol_chain (headers)
S_SET_SEGMENT (symbolP, SEG_TEXT);
} /* if pusing data into text */
resolve_symbol_value (symbolP, 1);
resolve_symbol_value (symbolP, finalize_syms);
/* Skip symbols which were equated to undefined or common
symbols. */

View file

@ -1972,7 +1972,7 @@ do_relocs_for (abfd, h, file_cursor)
/* Turn the segment of the symbol into an offset. */
if (symbol_ptr)
{
resolve_symbol_value (symbol_ptr, 1);
resolve_symbol_value (symbol_ptr, finalize_syms);
if (! symbol_ptr->sy_resolved)
{
char *file;
@ -2953,7 +2953,7 @@ yank_symbols ()
S_SET_SEGMENT (symbolP, SEG_E0);
} /* push data into text */
resolve_symbol_value (symbolP, 1);
resolve_symbol_value (symbolP, finalize_syms);
if (S_GET_STORAGE_CLASS (symbolP) == C_NULL)
{
@ -4185,7 +4185,7 @@ fixup_segment (segP, this_segment_type)
/* Make sure the symbols have been resolved; this may not have
happened if these are expression symbols. */
if (add_symbolP != NULL && ! add_symbolP->sy_resolved)
resolve_symbol_value (add_symbolP, 1);
resolve_symbol_value (add_symbolP, finalize_syms);
if (add_symbolP != NULL)
{
@ -4215,7 +4215,7 @@ fixup_segment (segP, this_segment_type)
}
if (sub_symbolP != NULL && ! sub_symbolP->sy_resolved)
resolve_symbol_value (sub_symbolP, 1);
resolve_symbol_value (sub_symbolP, finalize_syms);
if (add_symbolP != NULL
&& add_symbolP->sy_mri_common)

View file

@ -1,5 +1,5 @@
/* vms.c -- Write out a VAX/VMS object file
Copyright 1987, 1988, 1992, 1993, 1994, 1995, 1997, 1998, 2000
Copyright 1987, 1988, 1992, 1993, 1994, 1995, 1997, 1998, 2000, 2001
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@ -532,7 +532,7 @@ obj_crawl_symbol_chain (headers)
symbolPP = &symbol_rootP; /* -> last symbol chain link. */
while ((symbolP = *symbolPP) != NULL)
{
resolve_symbol_value (symbolP, 1);
resolve_symbol_value (symbolP, finalize_syms);
/* OK, here is how we decide which symbols go out into the
brave new symtab. Symbols that do are:

View file

@ -11353,7 +11353,7 @@ md_convert_frag (abfd, asec, fragp)
ext = false;
}
resolve_symbol_value (fragp->fr_symbol, 1);
resolve_symbol_value (fragp->fr_symbol, finalize_syms);
val = S_GET_VALUE (fragp->fr_symbol);
if (op->pcrel)
{

View file

@ -4221,7 +4221,7 @@ ppc_frob_symbol (sym)
ppc_last_function = sym;
if (symbol_get_tc (sym)->size != (symbolS *) NULL)
{
resolve_symbol_value (symbol_get_tc (sym)->size, 1);
resolve_symbol_value (symbol_get_tc (sym)->size, finalize_syms);
SA_SET_SYM_FSIZE (sym,
(long) S_GET_VALUE (symbol_get_tc (sym)->size));
}
@ -4281,7 +4281,7 @@ ppc_frob_symbol (sym)
- S_GET_VALUE (sym));
else
{
resolve_symbol_value (symbol_get_tc (sym)->next, 1);
resolve_symbol_value (symbol_get_tc (sym)->next, finalize_syms);
a->x_csect.x_scnlen.l = (S_GET_VALUE (symbol_get_tc (sym)->next)
- S_GET_VALUE (sym));
}
@ -4334,7 +4334,7 @@ ppc_frob_symbol (sym)
}
else
{
resolve_symbol_value (next, 1);
resolve_symbol_value (next, finalize_syms);
a->x_csect.x_scnlen.l = (S_GET_VALUE (next)
- S_GET_VALUE (sym));
}
@ -4365,7 +4365,8 @@ ppc_frob_symbol (sym)
{
while (symbol_get_tc (csect)->next != (symbolS *) NULL)
{
resolve_symbol_value (symbol_get_tc (csect)->next, 1);
resolve_symbol_value (symbol_get_tc (csect)->next,
finalize_syms);
if (S_GET_VALUE (symbol_get_tc (csect)->next)
> S_GET_VALUE (sym))
break;
@ -4411,7 +4412,7 @@ ppc_frob_symbol (sym)
/* The value is the offset from the enclosing csect. */
block = symbol_get_tc (sym)->within;
csect = symbol_get_tc (block)->within;
resolve_symbol_value (csect, 1);
resolve_symbol_value (csect, finalize_syms);
S_SET_VALUE (sym, S_GET_VALUE (sym) - S_GET_VALUE (csect));
}
else if (S_GET_STORAGE_CLASS (sym) == C_BINCL
@ -4628,7 +4629,7 @@ ppc_fix_adjustable (fix)
{
valueT val;
resolve_symbol_value (fix->fx_addsy, 1);
resolve_symbol_value (fix->fx_addsy, finalize_syms);
val = S_GET_VALUE (fix->fx_addsy);
if (ppc_toc_csect != (symbolS *) NULL
&& fix->fx_addsy != (symbolS *) NULL
@ -4648,7 +4649,7 @@ ppc_fix_adjustable (fix)
continue;
if (symbol_get_tc (sy)->class != XMC_TC)
break;
resolve_symbol_value (sy, 1);
resolve_symbol_value (sy, finalize_syms);
if (val == S_GET_VALUE (sy))
{
fix->fx_addsy = sy;
@ -4732,7 +4733,8 @@ ppc_fix_adjustable (fix)
&& S_GET_SEGMENT (fix->fx_addsy) == bss_section
&& ! S_IS_EXTERNAL (fix->fx_addsy))
{
resolve_symbol_value (symbol_get_frag (fix->fx_addsy)->fr_symbol, 1);
resolve_symbol_value (symbol_get_frag (fix->fx_addsy)->fr_symbol,
finalize_syms);
fix->fx_offset +=
(S_GET_VALUE (fix->fx_addsy)
- S_GET_VALUE (symbol_get_frag (fix->fx_addsy)->fr_symbol));

View file

@ -806,7 +806,7 @@ dwarf2dbg_convert_frag (frag)
{
offsetT addr_diff;
addr_diff = resolve_symbol_value (frag->fr_symbol, 1);
addr_diff = resolve_symbol_value (frag->fr_symbol, finalize_syms);
/* fr_var carries the max_chars that we created the fragment with.
fr_subtype carries the current expected length. We must, of

View file

@ -457,7 +457,7 @@ eh_frame_convert_frag (frag)
loc4_frag = (fragS *) frag->fr_opcode;
loc4_fix = (int) frag->fr_offset;
diff = resolve_symbol_value (frag->fr_symbol, 1);
diff = resolve_symbol_value (frag->fr_symbol, finalize_syms);
if (frag->fr_subtype == 0)
{

View file

@ -105,7 +105,7 @@ make_expr_symbol (expressionP)
symbol_set_value_expression (symbolP, expressionP);
if (expressionP->X_op == O_constant)
resolve_symbol_value (symbolP, 1);
resolve_symbol_value (symbolP, finalize_syms);
n = (struct expr_symbol_line *) xmalloc (sizeof *n);
n->sym = symbolP;