diff --git a/gas/ChangeLog b/gas/ChangeLog index 440323f56f..ce5c72b565 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2005-10-24 Bernd Schmidt + + * config/tc-bfin.c (Expr_Node_Gen_Reloc): If have symbol + constant, + make a single reloc with an offset rather than a stack. + * config/tc-bfin.h (MD_APPLY_SYM_VALUE): Define to 0. + 2005-10-24 Alexandre Oliva * read.c (potable): Add weakref. diff --git a/gas/config/tc-bfin.c b/gas/config/tc-bfin.c index a1b3971d6f..d9e88de19d 100644 --- a/gas/config/tc-bfin.c +++ b/gas/config/tc-bfin.c @@ -1003,6 +1003,21 @@ Expr_Node_Gen_Reloc (Expr_Node * head, int parent_reloc) if (note1 != NULL_CODE) note = conscode (note1, note); } + else if (head->type == Expr_Node_Binop + && (head->value.op_value == Expr_Op_Type_Add + || head->value.op_value == Expr_Op_Type_Sub) + && head->Left_Child->type == Expr_Node_Reloc + && head->Right_Child->type == Expr_Node_Constant) + { + int val = head->Right_Child->value.i_value; + if (head->value.op_value == Expr_Op_Type_Sub) + val = -val; + note = conscode (note_reloc2 (gencode (0), head->Left_Child->value.s_value, + parent_reloc, val, 0), + NULL_CODE); + if (note1 != NULL_CODE) + note = conscode (note1, note); + } else { /* Call the recursive function. */ diff --git a/gas/config/tc-bfin.h b/gas/config/tc-bfin.h index 9252e25d9a..773030cbb7 100644 --- a/gas/config/tc-bfin.h +++ b/gas/config/tc-bfin.h @@ -72,4 +72,7 @@ extern int bfin_force_relocation PARAMS ((struct fix *)); #define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC) extern long md_pcrel_from_section PARAMS ((struct fix *, segT)); +/* Values passed to md_apply_fix3 don't include symbol values. */ +#define MD_APPLY_SYM_VALUE(FIX) 0 + /* end of tc-bfin.h */