* symbols.c (resolve_symbol_value): Remove "finalize" param,
instead use finalize_syms directly. Don't treat expressions specially with regard to finalize_syms. Update calls to self. (resolve_local_symbol): Update call to resolve_symbol_value. (S_GET_VALUE): Likewise. Return resolve_symbol_value if !finalize_syms. * symbols.h (resolve_symbol_value): Update prototype. * config/obj-aout.c (obj_crawl_symbol_chain): Update call to resolve_symbol_value. * config/obj-bout.c (obj_crawl_symbol_chain): Likewise. * config/obj-coff.c (do_relocs_for): Likewise. (yank_symbols): Likewise. (fixup_segment): Likewise. * config/obj-vms.c (obj_crawl_symbol_chain): Likewise. * config/tc-mips.c (md_convert_frag): Likewise. * config/tc-ppc.c (ppc_frob_symbol): Likewise. (ppc_fix_adjustable): Likewise. * dwarf2dbg.c (dwarf2dbg_estimate_size_before_relax): Likewise. (dwarf2dbg_convert_frag): Likewise. * ehopt.c (eh_frame_estimate_size_before_relax): Likewise. (eh_frame_convert_frag): Likewise. * expr.c (make_expr_symbol): Likewise. * write.c (adjust_reloc_syms): Likewise. (write_object_file): Likewise. (relax_segment): Likewise. (fixup_segment): Likewise. (finalize_syms): Init to zero, and update comment. (write_object_file): Set finalize_syms to 1 rather than 2. * doc/internals.texi (sy_value): Mention finalize_syms. (S_GET_VALUE): Remove restriction on when S_GET_VALUE can be called.
This commit is contained in:
parent
c801568a3a
commit
6386f3a767
14 changed files with 84 additions and 63 deletions
|
@ -1,5 +1,36 @@
|
|||
2001-05-22 Alan Modra <amodra@one.net.au>
|
||||
|
||||
* symbols.c (resolve_symbol_value): Remove "finalize" param,
|
||||
instead use finalize_syms directly. Don't treat expressions
|
||||
specially with regard to finalize_syms. Update calls to self.
|
||||
(resolve_local_symbol): Update call to resolve_symbol_value.
|
||||
(S_GET_VALUE): Likewise. Return resolve_symbol_value if
|
||||
!finalize_syms.
|
||||
* symbols.h (resolve_symbol_value): Update prototype.
|
||||
* config/obj-aout.c (obj_crawl_symbol_chain): Update call
|
||||
to resolve_symbol_value.
|
||||
* config/obj-bout.c (obj_crawl_symbol_chain): Likewise.
|
||||
* config/obj-coff.c (do_relocs_for): Likewise.
|
||||
(yank_symbols): Likewise.
|
||||
(fixup_segment): Likewise.
|
||||
* config/obj-vms.c (obj_crawl_symbol_chain): Likewise.
|
||||
* config/tc-mips.c (md_convert_frag): Likewise.
|
||||
* config/tc-ppc.c (ppc_frob_symbol): Likewise.
|
||||
(ppc_fix_adjustable): Likewise.
|
||||
* dwarf2dbg.c (dwarf2dbg_estimate_size_before_relax): Likewise.
|
||||
(dwarf2dbg_convert_frag): Likewise.
|
||||
* ehopt.c (eh_frame_estimate_size_before_relax): Likewise.
|
||||
(eh_frame_convert_frag): Likewise.
|
||||
* expr.c (make_expr_symbol): Likewise.
|
||||
* write.c (adjust_reloc_syms): Likewise.
|
||||
(write_object_file): Likewise.
|
||||
(relax_segment): Likewise.
|
||||
(fixup_segment): Likewise.
|
||||
(finalize_syms): Init to zero, and update comment.
|
||||
(write_object_file): Set finalize_syms to 1 rather than 2.
|
||||
* doc/internals.texi (sy_value): Mention finalize_syms.
|
||||
(S_GET_VALUE): Remove restriction on when S_GET_VALUE can be called.
|
||||
|
||||
* config/tc-m68k.c (relaxable_symbol): Only treat external symbols
|
||||
as relaxable if embedded system, make weak syms non-relaxable.
|
||||
Move definition..
|
||||
|
|
|
@ -466,7 +466,7 @@ obj_crawl_symbol_chain (headers)
|
|||
S_SET_SEGMENT (symbolP, SEG_TEXT);
|
||||
} /* if pusing data into text */
|
||||
|
||||
resolve_symbol_value (symbolP, finalize_syms);
|
||||
resolve_symbol_value (symbolP);
|
||||
|
||||
/* Skip symbols which were equated to undefined or common
|
||||
symbols. */
|
||||
|
|
|
@ -260,7 +260,7 @@ obj_crawl_symbol_chain (headers)
|
|||
S_SET_SEGMENT (symbolP, SEG_TEXT);
|
||||
} /* if pusing data into text */
|
||||
|
||||
resolve_symbol_value (symbolP, finalize_syms);
|
||||
resolve_symbol_value (symbolP);
|
||||
|
||||
/* Skip symbols which were equated to undefined or common
|
||||
symbols. */
|
||||
|
|
|
@ -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, finalize_syms);
|
||||
resolve_symbol_value (symbol_ptr);
|
||||
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, finalize_syms);
|
||||
resolve_symbol_value (symbolP);
|
||||
|
||||
if (S_GET_STORAGE_CLASS (symbolP) == C_NULL)
|
||||
{
|
||||
|
@ -4186,7 +4186,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, finalize_syms);
|
||||
resolve_symbol_value (add_symbolP);
|
||||
|
||||
if (add_symbolP != NULL)
|
||||
{
|
||||
|
@ -4216,7 +4216,7 @@ fixup_segment (segP, this_segment_type)
|
|||
}
|
||||
|
||||
if (sub_symbolP != NULL && ! sub_symbolP->sy_resolved)
|
||||
resolve_symbol_value (sub_symbolP, finalize_syms);
|
||||
resolve_symbol_value (sub_symbolP);
|
||||
|
||||
if (add_symbolP != NULL
|
||||
&& add_symbolP->sy_mri_common)
|
||||
|
|
|
@ -532,7 +532,7 @@ obj_crawl_symbol_chain (headers)
|
|||
symbolPP = &symbol_rootP; /* -> last symbol chain link. */
|
||||
while ((symbolP = *symbolPP) != NULL)
|
||||
{
|
||||
resolve_symbol_value (symbolP, finalize_syms);
|
||||
resolve_symbol_value (symbolP);
|
||||
|
||||
/* OK, here is how we decide which symbols go out into the
|
||||
brave new symtab. Symbols that do are:
|
||||
|
|
|
@ -11356,7 +11356,7 @@ md_convert_frag (abfd, asec, fragp)
|
|||
ext = false;
|
||||
}
|
||||
|
||||
resolve_symbol_value (fragp->fr_symbol, finalize_syms);
|
||||
resolve_symbol_value (fragp->fr_symbol);
|
||||
val = S_GET_VALUE (fragp->fr_symbol);
|
||||
if (op->pcrel)
|
||||
{
|
||||
|
|
|
@ -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, finalize_syms);
|
||||
resolve_symbol_value (symbol_get_tc (sym)->size);
|
||||
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, finalize_syms);
|
||||
resolve_symbol_value (symbol_get_tc (sym)->next);
|
||||
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, finalize_syms);
|
||||
resolve_symbol_value (next);
|
||||
a->x_csect.x_scnlen.l = (S_GET_VALUE (next)
|
||||
- S_GET_VALUE (sym));
|
||||
}
|
||||
|
@ -4365,8 +4365,7 @@ ppc_frob_symbol (sym)
|
|||
{
|
||||
while (symbol_get_tc (csect)->next != (symbolS *) NULL)
|
||||
{
|
||||
resolve_symbol_value (symbol_get_tc (csect)->next,
|
||||
finalize_syms);
|
||||
resolve_symbol_value (symbol_get_tc (csect)->next);
|
||||
if (S_GET_VALUE (symbol_get_tc (csect)->next)
|
||||
> S_GET_VALUE (sym))
|
||||
break;
|
||||
|
@ -4412,7 +4411,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, finalize_syms);
|
||||
resolve_symbol_value (csect);
|
||||
S_SET_VALUE (sym, S_GET_VALUE (sym) - S_GET_VALUE (csect));
|
||||
}
|
||||
else if (S_GET_STORAGE_CLASS (sym) == C_BINCL
|
||||
|
@ -4629,7 +4628,7 @@ ppc_fix_adjustable (fix)
|
|||
{
|
||||
valueT val;
|
||||
|
||||
resolve_symbol_value (fix->fx_addsy, finalize_syms);
|
||||
resolve_symbol_value (fix->fx_addsy);
|
||||
val = S_GET_VALUE (fix->fx_addsy);
|
||||
if (ppc_toc_csect != (symbolS *) NULL
|
||||
&& fix->fx_addsy != (symbolS *) NULL
|
||||
|
@ -4649,7 +4648,7 @@ ppc_fix_adjustable (fix)
|
|||
continue;
|
||||
if (symbol_get_tc (sy)->class != XMC_TC)
|
||||
break;
|
||||
resolve_symbol_value (sy, finalize_syms);
|
||||
resolve_symbol_value (sy);
|
||||
if (val == S_GET_VALUE (sy))
|
||||
{
|
||||
fix->fx_addsy = sy;
|
||||
|
@ -4733,8 +4732,7 @@ 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,
|
||||
finalize_syms);
|
||||
resolve_symbol_value (symbol_get_frag (fix->fx_addsy)->fr_symbol);
|
||||
fix->fx_offset +=
|
||||
(S_GET_VALUE (fix->fx_addsy)
|
||||
- S_GET_VALUE (symbol_get_frag (fix->fx_addsy)->fr_symbol));
|
||||
|
|
|
@ -130,11 +130,12 @@ Symbol structures contain the following fields:
|
|||
@item sy_value
|
||||
This is an @code{expressionS} that describes the value of the symbol. It might
|
||||
refer to one or more other symbols; if so, its true value may not be known
|
||||
until @code{resolve_symbol_value} is called in @code{write_object_file}.
|
||||
until @code{resolve_symbol_value} is called with @var{finalize_syms} non-zero
|
||||
in @code{write_object_file}.
|
||||
|
||||
The expression is often simply a constant. Before @code{resolve_symbol_value}
|
||||
is called, the value is the offset from the frag (@pxref{Frags}). Afterward,
|
||||
the frag address has been added in.
|
||||
is called with @var{finalize_syms} set, the value is the offset from the frag
|
||||
(@pxref{Frags}). Afterward, the frag address has been added in.
|
||||
|
||||
@item sy_resolved
|
||||
This field is non-zero if the symbol's value has been completely resolved. It
|
||||
|
@ -208,9 +209,7 @@ Set the symbol's value.
|
|||
@item S_GET_VALUE
|
||||
@cindex S_GET_VALUE
|
||||
Get the symbol's value. This will cause @code{resolve_symbol_value} to be
|
||||
called if necessary, so @code{S_GET_VALUE} should only be called when it is
|
||||
safe to resolve symbols (i.e., after the entire input file has been read and
|
||||
all symbols have been defined).
|
||||
called if necessary.
|
||||
|
||||
@item S_SET_SEGMENT
|
||||
@cindex S_SET_SEGMENT
|
||||
|
|
|
@ -772,7 +772,7 @@ dwarf2dbg_estimate_size_before_relax (frag)
|
|||
offsetT addr_delta;
|
||||
int size;
|
||||
|
||||
addr_delta = resolve_symbol_value (frag->fr_symbol, 0);
|
||||
addr_delta = resolve_symbol_value (frag->fr_symbol);
|
||||
size = size_inc_line_addr (frag->fr_offset, addr_delta);
|
||||
|
||||
frag->fr_subtype = size;
|
||||
|
@ -806,7 +806,7 @@ dwarf2dbg_convert_frag (frag)
|
|||
{
|
||||
offsetT addr_diff;
|
||||
|
||||
addr_diff = resolve_symbol_value (frag->fr_symbol, finalize_syms);
|
||||
addr_diff = resolve_symbol_value (frag->fr_symbol);
|
||||
|
||||
/* fr_var carries the max_chars that we created the fragment with.
|
||||
fr_subtype carries the current expected length. We must, of
|
||||
|
|
|
@ -462,7 +462,7 @@ eh_frame_estimate_size_before_relax (frag)
|
|||
int ca = frag->fr_subtype >> 3;
|
||||
int ret;
|
||||
|
||||
diff = resolve_symbol_value (frag->fr_symbol, 0);
|
||||
diff = resolve_symbol_value (frag->fr_symbol);
|
||||
|
||||
if (ca > 0 && diff % ca == 0 && diff / ca < 0x40)
|
||||
ret = 0;
|
||||
|
@ -508,7 +508,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, finalize_syms);
|
||||
diff = resolve_symbol_value (frag->fr_symbol);
|
||||
|
||||
switch (frag->fr_subtype & 7)
|
||||
{
|
||||
|
|
|
@ -105,7 +105,7 @@ make_expr_symbol (expressionP)
|
|||
symbol_set_value_expression (symbolP, expressionP);
|
||||
|
||||
if (expressionP->X_op == O_constant)
|
||||
resolve_symbol_value (symbolP, finalize_syms);
|
||||
resolve_symbol_value (symbolP);
|
||||
|
||||
n = (struct expr_symbol_line *) xmalloc (sizeof *n);
|
||||
n->sym = symbolP;
|
||||
|
|
|
@ -831,9 +831,8 @@ verify_symbol_chain_2 (sym)
|
|||
values. */
|
||||
|
||||
valueT
|
||||
resolve_symbol_value (symp, finalize)
|
||||
resolve_symbol_value (symp)
|
||||
symbolS *symp;
|
||||
int finalize;
|
||||
{
|
||||
int resolved;
|
||||
valueT final_val;
|
||||
|
@ -850,7 +849,7 @@ resolve_symbol_value (symp, finalize)
|
|||
final_val = (local_symbol_get_frag (locsym)->fr_address
|
||||
+ locsym->lsy_offset) / bfd_octets_per_byte (stdoutput);
|
||||
|
||||
if (finalize)
|
||||
if (finalize_syms)
|
||||
{
|
||||
locsym->lsy_offset = final_val;
|
||||
local_symbol_mark_resolved (locsym);
|
||||
|
@ -870,14 +869,10 @@ resolve_symbol_value (symp, finalize)
|
|||
|
||||
resolved = 0;
|
||||
final_seg = S_GET_SEGMENT (symp);
|
||||
/* Expressions aren't really symbols, so don't finalize their values
|
||||
until relaxation is complete. */
|
||||
if (final_seg == expr_section && finalize != 2)
|
||||
finalize = 0;
|
||||
|
||||
if (symp->sy_resolving)
|
||||
{
|
||||
if (finalize)
|
||||
if (finalize_syms)
|
||||
as_bad (_("Symbol definition loop encountered at %s"),
|
||||
S_GET_NAME (symp));
|
||||
final_val = 0;
|
||||
|
@ -917,7 +912,7 @@ resolve_symbol_value (symp, finalize)
|
|||
|
||||
case O_symbol:
|
||||
case O_symbol_rva:
|
||||
left = resolve_symbol_value (add_symbol, finalize);
|
||||
left = resolve_symbol_value (add_symbol);
|
||||
do_symbol:
|
||||
|
||||
if (symp->sy_mri_common)
|
||||
|
@ -929,7 +924,7 @@ resolve_symbol_value (symp, finalize)
|
|||
break;
|
||||
}
|
||||
|
||||
if (finalize && final_val == 0)
|
||||
if (finalize_syms && final_val == 0)
|
||||
{
|
||||
if (LOCAL_SYMBOL_CHECK (add_symbol))
|
||||
add_symbol = local_symbol_convert ((struct local_symbol *)
|
||||
|
@ -945,7 +940,7 @@ resolve_symbol_value (symp, finalize)
|
|||
is equated. */
|
||||
if (! S_IS_DEFINED (add_symbol) || S_IS_COMMON (add_symbol))
|
||||
{
|
||||
if (finalize)
|
||||
if (finalize_syms)
|
||||
{
|
||||
S_SET_SEGMENT (symp, S_GET_SEGMENT (add_symbol));
|
||||
symp->sy_value.X_op = O_symbol;
|
||||
|
@ -969,7 +964,7 @@ resolve_symbol_value (symp, finalize)
|
|||
case O_uminus:
|
||||
case O_bit_not:
|
||||
case O_logical_not:
|
||||
left = resolve_symbol_value (add_symbol, finalize);
|
||||
left = resolve_symbol_value (add_symbol);
|
||||
|
||||
if (op == O_uminus)
|
||||
left = -left;
|
||||
|
@ -1004,8 +999,8 @@ resolve_symbol_value (symp, finalize)
|
|||
case O_gt:
|
||||
case O_logical_and:
|
||||
case O_logical_or:
|
||||
left = resolve_symbol_value (add_symbol, finalize);
|
||||
right = resolve_symbol_value (op_symbol, finalize);
|
||||
left = resolve_symbol_value (add_symbol);
|
||||
right = resolve_symbol_value (op_symbol);
|
||||
seg_left = S_GET_SEGMENT (add_symbol);
|
||||
seg_right = S_GET_SEGMENT (op_symbol);
|
||||
|
||||
|
@ -1047,7 +1042,7 @@ resolve_symbol_value (symp, finalize)
|
|||
&& (op != O_subtract
|
||||
|| seg_left != seg_right
|
||||
|| seg_left == undefined_section)
|
||||
&& finalize)
|
||||
&& finalize_syms)
|
||||
{
|
||||
char *file;
|
||||
unsigned int line;
|
||||
|
@ -1089,7 +1084,7 @@ resolve_symbol_value (symp, finalize)
|
|||
{
|
||||
/* If seg_right is not absolute_section, then we've
|
||||
already issued a warning about using a bad symbol. */
|
||||
if (seg_right == absolute_section && finalize)
|
||||
if (seg_right == absolute_section && finalize_syms)
|
||||
{
|
||||
char *file;
|
||||
unsigned int line;
|
||||
|
@ -1149,7 +1144,7 @@ resolve_symbol_value (symp, finalize)
|
|||
symp->sy_resolving = 0;
|
||||
}
|
||||
|
||||
if (finalize)
|
||||
if (finalize_syms)
|
||||
{
|
||||
S_SET_VALUE (symp, final_val);
|
||||
|
||||
|
@ -1163,7 +1158,7 @@ resolve_symbol_value (symp, finalize)
|
|||
|
||||
exit_dont_set_value:
|
||||
/* Don't worry if we can't resolve an expr_section symbol. */
|
||||
if (finalize)
|
||||
if (finalize_syms)
|
||||
{
|
||||
if (resolved)
|
||||
symp->sy_resolved = 1;
|
||||
|
@ -1190,7 +1185,7 @@ resolve_local_symbol (key, value)
|
|||
PTR value;
|
||||
{
|
||||
if (value != NULL)
|
||||
resolve_symbol_value (value, finalize_syms);
|
||||
resolve_symbol_value (value);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -1583,8 +1578,8 @@ S_GET_VALUE (s)
|
|||
|
||||
if (!s->sy_resolved && s->sy_value.X_op != O_constant)
|
||||
{
|
||||
valueT val = resolve_symbol_value (s, finalize_syms);
|
||||
if (finalize_syms != 2 && S_GET_SEGMENT (s) == expr_section)
|
||||
valueT val = resolve_symbol_value (s);
|
||||
if (!finalize_syms)
|
||||
return val;
|
||||
}
|
||||
if (s->sy_value.X_op != O_constant)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* symbols.h -
|
||||
Copyright 1987, 1990, 1992, 1993, 1994, 1995, 1997, 1999, 2000
|
||||
Copyright 1987, 1990, 1992, 1993, 1994, 1995, 1997, 1999, 2000, 2001
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GAS, the GNU Assembler.
|
||||
|
@ -61,7 +61,7 @@ void local_colon PARAMS ((int n));
|
|||
void symbol_begin PARAMS ((void));
|
||||
void symbol_print_statistics PARAMS ((FILE *));
|
||||
void symbol_table_insert PARAMS ((symbolS * symbolP));
|
||||
valueT resolve_symbol_value PARAMS ((symbolS *, int));
|
||||
valueT resolve_symbol_value PARAMS ((symbolS *));
|
||||
void resolve_local_symbol_values PARAMS ((void));
|
||||
|
||||
void print_symbol_value PARAMS ((symbolS *));
|
||||
|
|
20
gas/write.c
20
gas/write.c
|
@ -61,10 +61,8 @@ extern CONST int md_short_jump_size;
|
|||
extern CONST int md_long_jump_size;
|
||||
#endif
|
||||
|
||||
/* Used to control final evaluation of expressions that are more
|
||||
complex than symbol + constant. 1 means set final value for simple
|
||||
expressions, 2 means set final value for more complex expressions. */
|
||||
int finalize_syms = 1;
|
||||
/* Used to control final evaluation of expressions. */
|
||||
int finalize_syms = 0;
|
||||
|
||||
int symbol_table_frozen;
|
||||
void print_fixup PARAMS ((fixS *));
|
||||
|
@ -760,10 +758,10 @@ adjust_reloc_syms (abfd, sec, xxx)
|
|||
symbols, though, since they are not in the regular symbol
|
||||
table. */
|
||||
if (sym != NULL)
|
||||
resolve_symbol_value (sym, finalize_syms);
|
||||
resolve_symbol_value (sym);
|
||||
|
||||
if (fixp->fx_subsy != NULL)
|
||||
resolve_symbol_value (fixp->fx_subsy, finalize_syms);
|
||||
resolve_symbol_value (fixp->fx_subsy);
|
||||
|
||||
/* If this symbol is equated to an undefined symbol, convert
|
||||
the fixup to being against that symbol. */
|
||||
|
@ -1582,7 +1580,7 @@ write_object_file ()
|
|||
#endif /* BFD_ASSEMBLER */
|
||||
|
||||
/* Relaxation has completed. Freeze all syms. */
|
||||
finalize_syms = 2;
|
||||
finalize_syms = 1;
|
||||
|
||||
#if defined (BFD_ASSEMBLER) && defined (OBJ_COFF) && defined (TE_GO32)
|
||||
/* Now that the segments have their final sizes, run through the
|
||||
|
@ -1902,7 +1900,7 @@ write_object_file ()
|
|||
symbolS *symp;
|
||||
|
||||
for (symp = symbol_rootP; symp; symp = symbol_next (symp))
|
||||
resolve_symbol_value (symp, finalize_syms);
|
||||
resolve_symbol_value (symp);
|
||||
}
|
||||
resolve_local_symbol_values ();
|
||||
|
||||
|
@ -1950,7 +1948,7 @@ write_object_file ()
|
|||
/* Do it again, because adjust_reloc_syms might introduce
|
||||
more symbols. They'll probably only be section symbols,
|
||||
but they'll still need to have the values computed. */
|
||||
resolve_symbol_value (symp, finalize_syms);
|
||||
resolve_symbol_value (symp);
|
||||
|
||||
/* Skip symbols which were equated to undefined or common
|
||||
symbols. */
|
||||
|
@ -2488,7 +2486,7 @@ relax_segment (segment_frag_root, segment)
|
|||
valueT value;
|
||||
int size;
|
||||
|
||||
value = resolve_symbol_value (fragP->fr_symbol, 0);
|
||||
value = resolve_symbol_value (fragP->fr_symbol);
|
||||
size = sizeof_leb128 (value, fragP->fr_subtype);
|
||||
growth = size - fragP->fr_offset;
|
||||
fragP->fr_offset = size;
|
||||
|
@ -2611,7 +2609,7 @@ fixup_segment (fixP, this_segment_type)
|
|||
|
||||
if (sub_symbolP)
|
||||
{
|
||||
resolve_symbol_value (sub_symbolP, finalize_syms);
|
||||
resolve_symbol_value (sub_symbolP);
|
||||
if (add_symbolP == NULL || add_symbol_segment == absolute_section)
|
||||
{
|
||||
if (add_symbolP != NULL)
|
||||
|
|
Loading…
Reference in a new issue