X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gas%2Fsymbols.c;h=9202a9b315ab0dcf921a3af8040aa90ac476d997;hb=d905c788cf58f2d9b6346fab2d3a53c21fab8adf;hp=304a1eeb6e85c9de2d8b6a17d1a51d893f5507c6;hpb=a3371076af12586b4d0544dbdc12df2f670afbe3;p=binutils-gdb.git diff --git a/gas/symbols.c b/gas/symbols.c index 304a1eeb6e8..9202a9b315a 100644 --- a/gas/symbols.c +++ b/gas/symbols.c @@ -188,7 +188,7 @@ static unsigned long local_symbol_conversion_count; /* Create a local symbol and insert it into the local hash table. */ static struct local_symbol * -local_symbol_make (const char *name, segT section, valueT value, fragS *frag) +local_symbol_make (const char *name, segT section, valueT val, fragS *frag) { char *name_copy; struct local_symbol *ret; @@ -202,7 +202,7 @@ local_symbol_make (const char *name, segT section, valueT value, fragS *frag) ret->lsy_name = name_copy; ret->lsy_section = section; local_symbol_set_frag (ret, frag); - ret->lsy_value = value; + ret->lsy_value = val; hash_jam (local_hash, name_copy, (void *) ret); @@ -1484,21 +1484,21 @@ snapshot_symbol (symbolS **symbolPP, valueT *valueP, segT *segP, fragS **fragPP) } else { - expressionS expr = symbolP->sy_value; + expressionS exp = symbolP->sy_value; - if (!symbolP->sy_resolved && expr.X_op != O_illegal) + if (!symbolP->sy_resolved && exp.X_op != O_illegal) { int resolved; if (symbolP->sy_resolving) return 0; symbolP->sy_resolving = 1; - resolved = resolve_expression (&expr); + resolved = resolve_expression (&exp); symbolP->sy_resolving = 0; if (!resolved) return 0; - switch (expr.X_op) + switch (exp.X_op) { case O_constant: case O_register: @@ -1507,23 +1507,20 @@ snapshot_symbol (symbolS **symbolPP, valueT *valueP, segT *segP, fragS **fragPP) /* Fall thru. */ case O_symbol: case O_symbol_rva: - symbolP = expr.X_add_symbol; + symbolP = exp.X_add_symbol; break; default: return 0; } } - /* Never change a defined symbol. */ - if (symbolP->bsym->section == undefined_section - || symbolP->bsym->section == expr_section) - *symbolPP = symbolP; - *valueP = expr.X_add_number; + *symbolPP = symbolP; + *valueP = exp.X_add_number; *segP = symbolP->bsym->section; *fragPP = symbolP->sy_frag; if (*segP == expr_section) - switch (expr.X_op) + switch (exp.X_op) { case O_constant: *segP = absolute_section; break; case O_register: *segP = reg_section; break; @@ -1865,17 +1862,17 @@ decode_local_label_name (char *s) int instance_number; char *type; const char *message_format; - int index = 0; + int lindex = 0; #ifdef LOCAL_LABEL_PREFIX - if (s[index] == LOCAL_LABEL_PREFIX) - ++index; + if (s[lindex] == LOCAL_LABEL_PREFIX) + ++lindex; #endif - if (s[index] != 'L') + if (s[lindex] != 'L') return s; - for (label_number = 0, p = s + index + 1; ISDIGIT (*p); ++p) + for (label_number = 0, p = s + lindex + 1; ISDIGIT (*p); ++p) label_number = (10 * label_number) + *p - '0'; if (*p == DOLLAR_LABEL_CHAR) @@ -2388,6 +2385,20 @@ symbol_set_value_expression (symbolS *s, const expressionS *exp) S_CLEAR_WEAKREFR (s); } +/* Return whether 2 symbols are the same. */ + +int +symbol_same_p (symbolS *s1, symbolS *s2) +{ + if (s1->bsym == NULL + && local_symbol_converted_p ((struct local_symbol *) s1)) + s1 = local_symbol_get_real_symbol ((struct local_symbol *) s1); + if (s2->bsym == NULL + && local_symbol_converted_p ((struct local_symbol *) s2)) + s2 = local_symbol_get_real_symbol ((struct local_symbol *) s2); + return s1 == s2; +} + /* Return a pointer to the X_add_number component of a symbol. */ offsetT *