Combine two existing mechanisms for copying symbol attributes, and fix a bug:

* symbols.c (copy_symbol_attributes): New function.  Copies BFD symbol flags
and calls OBJ_COPY_SYMBOL_ATTRIBUTES.
(resolve_symbol_value, case O_symbol): Call it, if X_add_number is zero.  Don't
call obj_frob_forward_symbol.
* read.c (pseudo_set): Call copy_symbol_attributes, but only if X_add_number is
zero.
* config/obj-elf.h (obj_frob_forward_symbol): Deleted.
This commit is contained in:
Ken Raeburn 1994-09-21 22:21:25 +00:00
parent ba466c4c9d
commit ef19887066
1 changed files with 3 additions and 10 deletions

View File

@ -1579,7 +1579,8 @@ pseudo_set (symbolP)
break;
case O_symbol:
if (S_GET_SEGMENT (exp.X_add_symbol) == undefined_section)
if (S_GET_SEGMENT (exp.X_add_symbol) == undefined_section
|| exp.X_add_number != 0)
symbolP->sy_value = exp;
else
{
@ -1595,15 +1596,7 @@ pseudo_set (symbolP)
S_SET_VALUE (symbolP,
exp.X_add_number + S_GET_VALUE (s));
symbolP->sy_frag = s->sy_frag;
#ifdef BFD_ASSEMBLER
/* In an expression, transfer the settings of these flags.
The user can override later, of course. */
#define COPIED_SYMFLAGS (BSF_FUNCTION)
symbolP->bsym->flags |= s->bsym->flags & COPIED_SYMFLAGS;
#endif
#ifdef OBJ_COPY_SYMBOL_ATTRIBUTES
OBJ_COPY_SYMBOL_ATTRIBUTES (symbolP, s);
#endif
copy_symbol_attributes (symbolP, s);
}
break;