This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: bugs with binutils-2.11, target m68k-elf


Here's the second step in fixing these problems.  It's really a
refinement (correction, I suppose) of my 2001-03-30 patch where I
delayed final resolution of expression syms until after relaxation
had finished.  That works well for complex expressions, but some
fairly simple expressions such as sym1-sym2 are resolved too early
as these expressions don't need a special expression sym.

This is rather larger than necessary, as I decided to remove
"finalize" as a parameter to resolve_symbol_value.  Practically
every invocation passed in finalize_sym, and S_GET_VALUE needed
access to the global var so it seemed a bit pointless passing it
around all the time.

	* 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.

Applying to mainline.

-- 
Alan Modra


Index: gas/dwarf2dbg.c
===================================================================
RCS file: /cvs/src/src/gas/dwarf2dbg.c,v
retrieving revision 1.38
diff -u -p -r1.38 dwarf2dbg.c
--- dwarf2dbg.c	2001/04/12 16:00:32	1.38
+++ dwarf2dbg.c	2001/05/22 03:56:34
@@ -772,7 +772,7 @@ dwarf2dbg_estimate_size_before_relax (fr
   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
Index: gas/ehopt.c
===================================================================
RCS file: /cvs/src/src/gas/ehopt.c,v
retrieving revision 1.8
diff -u -p -r1.8 ehopt.c
--- ehopt.c	2001/05/15 06:10:43	1.8
+++ ehopt.c	2001/05/22 03:56:37
@@ -462,7 +462,7 @@ eh_frame_estimate_size_before_relax (fra
   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)
     {
Index: gas/expr.c
===================================================================
RCS file: /cvs/src/src/gas/expr.c,v
retrieving revision 1.32
diff -u -p -r1.32 expr.c
--- expr.c	2001/04/12 07:03:10	1.32
+++ expr.c	2001/05/22 03:56:42
@@ -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;
Index: gas/symbols.c
===================================================================
RCS file: /cvs/src/src/gas/symbols.c,v
retrieving revision 1.21
diff -u -p -r1.21 symbols.c
--- symbols.c	2001/04/14 06:57:28	1.21
+++ symbols.c	2001/05/22 03:56:48
@@ -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)
Index: gas/symbols.h
===================================================================
RCS file: /cvs/src/src/gas/symbols.h,v
retrieving revision 1.5
diff -u -p -r1.5 symbols.h
--- symbols.h	2001/03/08 23:24:22	1.5
+++ symbols.h	2001/05/22 03:56:50
@@ -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 *));
Index: gas/write.c
===================================================================
RCS file: /cvs/src/src/gas/write.c,v
retrieving revision 1.32
diff -u -p -r1.32 write.c
--- write.c	2001/04/13 00:34:36	1.32
+++ write.c	2001/05/22 03:56:59
@@ -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, segmen
 		  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)
Index: gas/config/obj-aout.c
===================================================================
RCS file: /cvs/src/src/gas/config/obj-aout.c,v
retrieving revision 1.12
diff -u -p -r1.12 obj-aout.c
--- obj-aout.c	2001/03/30 07:07:10	1.12
+++ obj-aout.c	2001/05/22 03:57:03
@@ -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.  */
Index: gas/config/obj-bout.c
===================================================================
RCS file: /cvs/src/src/gas/config/obj-bout.c,v
retrieving revision 1.7
diff -u -p -r1.7 obj-bout.c
--- obj-bout.c	2001/03/30 07:07:10	1.7
+++ obj-bout.c	2001/05/22 03:57:03
@@ -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.  */
Index: gas/config/obj-coff.c
===================================================================
RCS file: /cvs/src/src/gas/config/obj-coff.c,v
retrieving revision 1.44
diff -u -p -r1.44 obj-coff.c
--- obj-coff.c	2001/04/25 09:11:31	1.44
+++ obj-coff.c	2001/05/22 03:57:17
@@ -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)
Index: gas/config/obj-vms.c
===================================================================
RCS file: /cvs/src/src/gas/config/obj-vms.c,v
retrieving revision 1.7
diff -u -p -r1.7 obj-vms.c
--- obj-vms.c	2001/05/10 11:32:51	1.7
+++ obj-vms.c	2001/05/22 03:57:34
@@ -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:
Index: gas/config/tc-mips.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-mips.c,v
retrieving revision 1.40
diff -u -p -r1.40 tc-mips.c
--- tc-mips.c	2001/04/29 17:58:39	1.40
+++ tc-mips.c	2001/05/22 03:58:27
@@ -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)
 	{
Index: gas/config/tc-ppc.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-ppc.c,v
retrieving revision 1.20
diff -u -p -r1.20 tc-ppc.c
--- tc-ppc.c	2001/03/30 07:07:11	1.20
+++ tc-ppc.c	2001/05/22 03:58:44
@@ -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));
Index: gas/doc/internals.texi
===================================================================
RCS file: /cvs/src/src/gas/doc/internals.texi,v
retrieving revision 1.22
diff -u -p -r1.22 internals.texi
--- internals.texi	2001/03/08 23:24:26	1.22
+++ internals.texi	2001/05/22 03:58:57
@@ -130,11 +130,12 @@ Symbol structures contain the following 
 @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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]