* config/tc-v850.c (md_assemble): When no reloc, create pcrel fixups
only for V850_OPERAND_DISP operands.
This commit is contained in:
parent
e85ca5bb79
commit
ec178e1bbb
|
@ -1,3 +1,8 @@
|
|||
2003-07-15 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* config/tc-v850.c (md_assemble): When no reloc, create pcrel fixups
|
||||
only for V850_OPERAND_DISP operands.
|
||||
|
||||
2003-07-15 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* frags.c (frag_more): Move segment checks to..
|
||||
|
|
|
@ -197,7 +197,7 @@ v850_offset (ignore)
|
|||
int temp = get_absolute_expression ();
|
||||
|
||||
pfrag = frag_var (rs_org, 1, 1, (relax_substateT)0, (symbolS *)0,
|
||||
(offsetT) temp, (char *) 0);
|
||||
(offsetT) temp, (char *) 0);
|
||||
*pfrag = 0;
|
||||
|
||||
demand_empty_rest_of_line ();
|
||||
|
@ -396,12 +396,12 @@ v850_comm (area)
|
|||
}
|
||||
else
|
||||
{
|
||||
segT old_sec;
|
||||
int old_subsec;
|
||||
segT old_sec;
|
||||
int old_subsec;
|
||||
|
||||
allocate_common:
|
||||
old_sec = now_seg;
|
||||
old_subsec = now_subseg;
|
||||
old_sec = now_seg;
|
||||
old_subsec = now_subseg;
|
||||
|
||||
S_SET_VALUE (symbolP, (valueT) size);
|
||||
S_SET_ALIGN (symbolP, temp);
|
||||
|
@ -477,7 +477,7 @@ set_machine (number)
|
|||
|
||||
switch (machine)
|
||||
{
|
||||
case 0: processor_mask = PROCESSOR_V850; break;
|
||||
case 0: processor_mask = PROCESSOR_V850; break;
|
||||
case bfd_mach_v850e: processor_mask = PROCESSOR_V850E; break;
|
||||
}
|
||||
}
|
||||
|
@ -539,8 +539,8 @@ const pseudo_typeS md_pseudo_table[] =
|
|||
{ "call_table_data", v850_seg, CALL_TABLE_DATA_SECTION },
|
||||
{ "call_table_text", v850_seg, CALL_TABLE_TEXT_SECTION },
|
||||
{ "v850e", set_machine, bfd_mach_v850e },
|
||||
{ "longcall", v850_longcode, 1 },
|
||||
{ "longjump", v850_longcode, 2 },
|
||||
{ "longcall", v850_longcode, 1 },
|
||||
{ "longjump", v850_longcode, 2 },
|
||||
{ NULL, NULL, 0 }
|
||||
};
|
||||
|
||||
|
@ -749,7 +749,7 @@ register_name (expressionP)
|
|||
/* Look to see if it's in the register table. */
|
||||
if (reg_number >= 0)
|
||||
{
|
||||
expressionP->X_op = O_register;
|
||||
expressionP->X_op = O_register;
|
||||
expressionP->X_add_number = reg_number;
|
||||
|
||||
/* Make the rest nice. */
|
||||
|
@ -770,10 +770,10 @@ register_name (expressionP)
|
|||
/* Summary of system_register_name().
|
||||
|
||||
in: INPUT_LINE_POINTER points to 1st char of operand.
|
||||
EXPRESSIONP points to an expression structure to be filled in.
|
||||
ACCEPT_NUMBERS is true iff numerical register names may be used.
|
||||
ACCEPT_LIST_NAMES is true iff the special names PS and SR may be
|
||||
accepted.
|
||||
EXPRESSIONP points to an expression structure to be filled in.
|
||||
ACCEPT_NUMBERS is true iff numerical register names may be used.
|
||||
ACCEPT_LIST_NAMES is true iff the special names PS and SR may be
|
||||
accepted.
|
||||
|
||||
out: An expressionS structure in expressionP.
|
||||
The operand may have been a register: in this case, X_op == O_register,
|
||||
|
@ -837,7 +837,7 @@ system_register_name (expressionP, accept_numbers, accept_list_names)
|
|||
/* Look to see if it's in the register table. */
|
||||
if (reg_number >= 0)
|
||||
{
|
||||
expressionP->X_op = O_register;
|
||||
expressionP->X_op = O_register;
|
||||
expressionP->X_add_number = reg_number;
|
||||
|
||||
/* Make the rest nice. */
|
||||
|
@ -888,7 +888,7 @@ cc_name (expressionP)
|
|||
/* Look to see if it's in the register table. */
|
||||
if (reg_number >= 0)
|
||||
{
|
||||
expressionP->X_op = O_constant;
|
||||
expressionP->X_op = O_constant;
|
||||
expressionP->X_add_number = reg_number;
|
||||
|
||||
/* Make the rest nice. */
|
||||
|
@ -919,13 +919,13 @@ skip_white_space ()
|
|||
/* Summary of parse_register_list ().
|
||||
|
||||
in: INPUT_LINE_POINTER points to 1st char of a list of registers.
|
||||
INSN is the partially constructed instruction.
|
||||
OPERAND is the operand being inserted.
|
||||
INSN is the partially constructed instruction.
|
||||
OPERAND is the operand being inserted.
|
||||
|
||||
out: NULL if the parse completed successfully, otherwise a
|
||||
pointer to an error message is returned. If the parse
|
||||
completes the correct bit fields in the instruction
|
||||
will be filled in.
|
||||
pointer to an error message is returned. If the parse
|
||||
completes the correct bit fields in the instruction
|
||||
will be filled in.
|
||||
|
||||
Parses register lists with the syntax:
|
||||
|
||||
|
@ -1158,7 +1158,6 @@ md_show_usage (stream)
|
|||
fprintf (stream, _(" -mv850e The code is targeted at the v850e\n"));
|
||||
fprintf (stream, _(" -mv850any The code is generic, despite any processor specific instructions\n"));
|
||||
fprintf (stream, _(" -mrelax Enable relaxation\n"));
|
||||
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -1347,7 +1346,7 @@ md_begin ()
|
|||
else
|
||||
/* xgettext:c-format */
|
||||
as_bad (_("Unable to determine default target processor from string: %s"),
|
||||
TARGET_CPU);
|
||||
TARGET_CPU);
|
||||
|
||||
v850_hash = hash_new ();
|
||||
|
||||
|
@ -1509,13 +1508,13 @@ v850_reloc_prefix (operand)
|
|||
return reloc; \
|
||||
}
|
||||
|
||||
CHECK_ ("hi0", BFD_RELOC_HI16 );
|
||||
CHECK_ ("hi", BFD_RELOC_HI16_S );
|
||||
CHECK_ ("lo", BFD_RELOC_LO16 );
|
||||
CHECK_ ("hi0", BFD_RELOC_HI16 );
|
||||
CHECK_ ("hi", BFD_RELOC_HI16_S );
|
||||
CHECK_ ("lo", BFD_RELOC_LO16 );
|
||||
CHECK_ ("sdaoff", handle_sdaoff (operand));
|
||||
CHECK_ ("zdaoff", handle_zdaoff (operand));
|
||||
CHECK_ ("tdaoff", handle_tdaoff (operand));
|
||||
CHECK_ ("hilo", BFD_RELOC_32 );
|
||||
CHECK_ ("hilo", BFD_RELOC_32 );
|
||||
CHECK_ ("ctoff", handle_ctoff (operand) );
|
||||
|
||||
/* Restore skipped parenthesis. */
|
||||
|
@ -1791,8 +1790,8 @@ md_assemble (str)
|
|||
}
|
||||
|
||||
extra_data_after_insn = TRUE;
|
||||
extra_data_len = 4;
|
||||
extra_data = 0;
|
||||
extra_data_len = 4;
|
||||
extra_data = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -1820,8 +1819,8 @@ md_assemble (str)
|
|||
}
|
||||
|
||||
extra_data_after_insn = TRUE;
|
||||
extra_data_len = 4;
|
||||
extra_data = ex.X_add_number;
|
||||
extra_data_len = 4;
|
||||
extra_data = ex.X_add_number;
|
||||
}
|
||||
|
||||
if (fc > MAX_INSN_FIXUPS)
|
||||
|
@ -1897,7 +1896,7 @@ md_assemble (str)
|
|||
|
||||
/* The parse_register_list() function has already done
|
||||
everything, so fake a dummy expression. */
|
||||
ex.X_op = O_constant;
|
||||
ex.X_op = O_constant;
|
||||
ex.X_add_number = 0;
|
||||
}
|
||||
else if (operand->flags & V850E_IMMEDIATE16)
|
||||
|
@ -1917,9 +1916,9 @@ md_assemble (str)
|
|||
}
|
||||
|
||||
extra_data_after_insn = TRUE;
|
||||
extra_data_len = 2;
|
||||
extra_data = ex.X_add_number;
|
||||
ex.X_add_number = 0;
|
||||
extra_data_len = 2;
|
||||
extra_data = ex.X_add_number;
|
||||
ex.X_add_number = 0;
|
||||
}
|
||||
else if (operand->flags & V850E_IMMEDIATE32)
|
||||
{
|
||||
|
@ -1929,9 +1928,9 @@ md_assemble (str)
|
|||
errmsg = _("constant expression expected");
|
||||
|
||||
extra_data_after_insn = TRUE;
|
||||
extra_data_len = 4;
|
||||
extra_data = ex.X_add_number;
|
||||
ex.X_add_number = 0;
|
||||
extra_data_len = 4;
|
||||
extra_data = ex.X_add_number;
|
||||
ex.X_add_number = 0;
|
||||
}
|
||||
else if (register_name (&ex)
|
||||
&& (operand->flags & V850_OPERAND_REG) == 0)
|
||||
|
@ -2216,7 +2215,7 @@ md_assemble (str)
|
|||
fix_new_exp (frag_now,
|
||||
f - frag_now->fr_literal, 4,
|
||||
& fixups[i].exp,
|
||||
1 /* FIXME: V850_OPERAND_RELATIVE ??? */,
|
||||
(operand->flags & V850_OPERAND_DISP) != 0,
|
||||
(bfd_reloc_code_real_type) (fixups[i].opindex
|
||||
+ (int) BFD_RELOC_UNUSED));
|
||||
}
|
||||
|
@ -2235,7 +2234,7 @@ tc_gen_reloc (seg, fixp)
|
|||
{
|
||||
arelent *reloc;
|
||||
|
||||
reloc = (arelent *) xmalloc (sizeof (arelent));
|
||||
reloc = (arelent *) xmalloc (sizeof (arelent));
|
||||
reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
|
||||
*reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
|
||||
reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
|
||||
|
@ -2255,7 +2254,7 @@ tc_gen_reloc (seg, fixp)
|
|||
reloc->addend = fixp->fx_addnumber;
|
||||
}
|
||||
|
||||
reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type);
|
||||
reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type);
|
||||
|
||||
if (reloc->howto == (reloc_howto_type *) NULL)
|
||||
{
|
||||
|
@ -2285,7 +2284,7 @@ v850_handle_align (frag)
|
|||
&& now_seg != v850_seg_table[TBSS_SECTION].s
|
||||
&& now_seg != v850_seg_table[ZBSS_SECTION].s)
|
||||
fix_new (frag, frag->fr_fix, 2, & abs_symbol, frag->fr_offset, 0,
|
||||
BFD_RELOC_V850_ALIGN);
|
||||
BFD_RELOC_V850_ALIGN);
|
||||
}
|
||||
|
||||
/* Return current size of variable part of frag. */
|
||||
|
@ -2370,7 +2369,7 @@ md_apply_fix3 (fixP, valueP, seg)
|
|||
operand = &v850_operands[opindex];
|
||||
|
||||
/* Fetch the instruction, insert the fully resolved operand
|
||||
value, and stuff the instruction back again.
|
||||
value, and stuff the instruction back again.
|
||||
|
||||
Note the instruction has been stored in little endian
|
||||
format! */
|
||||
|
|
Loading…
Reference in New Issue