summaryrefslogtreecommitdiff
path: root/gas/symbols.c
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@novell.com>2005-12-22 17:05:40 +0000
committerJan Beulich <jbeulich@novell.com>2005-12-22 17:05:40 +0000
commit2bcc67f24e4f08ffc01231508622001fcc09fa9d (patch)
treeaf08cd2021653700ed8ee35861c49940b19915ad /gas/symbols.c
parenta2ceceaedb8cffaacb49c3d4dd6de52eb9575831 (diff)
downloadbinutils-redhat-2bcc67f24e4f08ffc01231508622001fcc09fa9d.tar.gz
gas/
2005-12-22 Jan Beulich <jbeulich@novell.com> * symbols.h (snapshot_symbol): First parameter is now pointer to pointer to symbolS. * symbols.c (snapshot_symbol): Likewise. Store resulting symbol there. Use symbol_equated_p. * expr.c (resolve_expression): Change first argument to snapshot_symbol. Track possibly changed add_symbol consistently across function. Resolve more special cases with known result. Also update final_val when replacing add_symbol. gas/testsuite/ 2005-12-22 Jan Beulich <jbeulich@novell.com> * gas/all/cond.s: Also check .if works on equates to undefined when the expression value can be known without knowing the value of the symbol. * gas/all/cond.l: Adjust. * gas/i386/equ.s: Also check .if works on (equates to) registers when the expression value can be known without knowing the value of the register. * gas/i386/equ.e: Adjust.
Diffstat (limited to 'gas/symbols.c')
-rw-r--r--gas/symbols.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/gas/symbols.c b/gas/symbols.c
index 8e3d492c71..c9298e044c 100644
--- a/gas/symbols.c
+++ b/gas/symbols.c
@@ -1355,8 +1355,10 @@ resolve_local_symbol_values (void)
sub-expressions used. */
int
-snapshot_symbol (symbolS *symbolP, valueT *valueP, segT *segP, fragS **fragPP)
+snapshot_symbol (symbolS **symbolPP, valueT *valueP, segT *segP, fragS **fragPP)
{
+ symbolS *symbolP = *symbolPP;
+
if (LOCAL_SYMBOL_CHECK (symbolP))
{
struct local_symbol *locsym = (struct local_symbol *) symbolP;
@@ -1385,10 +1387,7 @@ snapshot_symbol (symbolS *symbolP, valueT *valueP, segT *segP, fragS **fragPP)
{
case O_constant:
case O_register:
- /* This check wouldn't be needed if pseudo_set() didn't set
- symbols equated to bare symbols to undefined_section. */
- if (symbolP->bsym->section != undefined_section
- || symbolP->sy_value.X_op != O_symbol)
+ if (!symbol_equated_p (symbolP))
break;
/* Fall thru. */
case O_symbol:
@@ -1400,6 +1399,7 @@ snapshot_symbol (symbolS *symbolP, valueT *valueP, segT *segP, fragS **fragPP)
}
}
+ *symbolPP = symbolP;
*valueP = expr.X_add_number;
*segP = symbolP->bsym->section;
*fragPP = symbolP->sy_frag;