aboutsummaryrefslogtreecommitdiff
path: root/gas/cgen.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/cgen.c')
-rw-r--r--gas/cgen.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/gas/cgen.c b/gas/cgen.c
index 7398abf..2a57a78 100644
--- a/gas/cgen.c
+++ b/gas/cgen.c
@@ -26,7 +26,6 @@
#include "dwarf2dbg.h"
#include "symbols.h"
-#include "struc-symbol.h"
#ifdef OBJ_COMPLEX_RELC
static expressionS * make_right_shifted_expr
@@ -416,6 +415,8 @@ gas_cgen_parse_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
if (! errmsg)
{
+ asymbol *bsym;
+
/* Fragment the expression as necessary, and queue a reloc. */
memset (& dummy_fixup, 0, sizeof (fixS));
@@ -423,11 +424,12 @@ gas_cgen_parse_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
if (exp.X_op == O_symbol
&& reloc_type == BFD_RELOC_RELC
- && exp.X_add_symbol->sy_value.X_op == O_constant
- && (!exp.X_add_symbol->bsym
- || (exp.X_add_symbol->bsym->section != expr_section
- && exp.X_add_symbol->bsym->section != absolute_section
- && exp.X_add_symbol->bsym->section != undefined_section)))
+ && symbol_constant_p (exp.X_add_symbol)
+ && (!symbol_symbolS (exp.X_add_symbol)
+ || (bsym = symbol_get_bfdsym (exp.X_add_symbol)) == NULL
+ || (bsym->section != expr_section
+ && bsym->section != absolute_section
+ && bsym->section != undefined_section)))
{
/* Local labels will have been (eagerly) turned into constants
by now, due to the inappropriately deep insight of the
@@ -455,13 +457,15 @@ gas_cgen_parse_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
if (operand && (operand->hw_type == HW_H_SINT))
signed_p = 1;
- if (stmp->bsym && (stmp->bsym->section == expr_section)
+ if (symbol_symbolS (stmp)
+ && (bsym = symbol_get_bfdsym (stmp)) != NULL
+ && bsym->section == expr_section
&& ! S_IS_LOCAL (stmp))
{
if (signed_p)
- stmp->bsym->flags |= BSF_SRELC;
+ bsym->flags |= BSF_SRELC;
else
- stmp->bsym->flags |= BSF_RELC;
+ bsym->flags |= BSF_RELC;
}
/* Now package it all up for the fixup emitter. */
@@ -771,12 +775,12 @@ weak_operand_overflow_check (const expressionS * exp,
mask = exp->X_add_number;
if (exp->X_add_symbol
- && exp->X_add_symbol->sy_value.X_op == O_constant)
- mask |= exp->X_add_symbol->sy_value.X_add_number;
+ && symbol_constant_p (exp->X_add_symbol))
+ mask |= *symbol_X_add_number (exp->X_add_symbol);
if (exp->X_op_symbol
- && exp->X_op_symbol->sy_value.X_op == O_constant)
- mask |= exp->X_op_symbol->sy_value.X_add_number;
+ && symbol_constant_p (exp->X_op_symbol))
+ mask |= *symbol_X_add_number (exp->X_op_symbol);
/* Want to know if mask covers more bits than opmask.
this is the same as asking if mask has any bits not in opmask,
@@ -800,15 +804,17 @@ make_right_shifted_expr (expressionS * exp,
{
symbolS * stmp = 0;
expressionS * new_exp;
+ asymbol *bsym;
stmp = expr_build_binary (O_right_shift,
make_expr_symbol (exp),
expr_build_uconstant (amount));
+ bsym = symbol_get_bfdsym (stmp);
if (signed_p)
- stmp->bsym->flags |= BSF_SRELC;
+ bsym->flags |= BSF_SRELC;
else
- stmp->bsym->flags |= BSF_RELC;
+ bsym->flags |= BSF_RELC;
/* Then wrap that in a "symbol expr" for good measure. */
new_exp = XNEW (expressionS);