aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-s390.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/config/tc-s390.c')
-rw-r--r--gas/config/tc-s390.c196
1 files changed, 96 insertions, 100 deletions
diff --git a/gas/config/tc-s390.c b/gas/config/tc-s390.c
index 1f6f02c..2fb2c6c 100644
--- a/gas/config/tc-s390.c
+++ b/gas/config/tc-s390.c
@@ -1680,112 +1680,110 @@ tc_s390_force_relocation (fixp)
that, we determine the correct reloc code and put it back in the
fixup. */
-int
-md_apply_fix3 (fixp, valuep, seg)
- fixS *fixp;
- valueT *valuep;
+void
+md_apply_fix3 (fixP, valP, seg)
+ fixS *fixP;
+ valueT *valP;
segT seg;
{
char *where;
- valueT value;
+ valueT value = * valP;
- value = *valuep;
- where = fixp->fx_frag->fr_literal + fixp->fx_where;
+ where = fixP->fx_frag->fr_literal + fixP->fx_where;
- if (fixp->fx_subsy != NULL)
+ if (fixP->fx_subsy != NULL)
{
- if ((fixp->fx_addsy != NULL
- && S_GET_SEGMENT (fixp->fx_addsy) == S_GET_SEGMENT (fixp->fx_subsy)
- && SEG_NORMAL (S_GET_SEGMENT (fixp->fx_addsy)))
- || (S_GET_SEGMENT (fixp->fx_subsy) == absolute_section))
- value += S_GET_VALUE (fixp->fx_subsy);
- if (!S_IS_DEFINED (fixp->fx_subsy))
- as_bad_where (fixp->fx_file, fixp->fx_line,
+ if ((fixP->fx_addsy != NULL
+ && S_GET_SEGMENT (fixP->fx_addsy) == S_GET_SEGMENT (fixP->fx_subsy)
+ && SEG_NORMAL (S_GET_SEGMENT (fixP->fx_addsy)))
+ || (S_GET_SEGMENT (fixP->fx_subsy) == absolute_section))
+ value += S_GET_VALUE (fixP->fx_subsy);
+ if (!S_IS_DEFINED (fixP->fx_subsy))
+ as_bad_where (fixP->fx_file, fixP->fx_line,
_("unresolved fx_subsy symbol that must be resolved"));
- value -= S_GET_VALUE(fixp->fx_subsy);
+ value -= S_GET_VALUE(fixP->fx_subsy);
- if (S_GET_SEGMENT (fixp->fx_subsy) == seg && ! fixp->fx_pcrel)
- value += MD_PCREL_FROM_SECTION (fixp, seg);
+ if (S_GET_SEGMENT (fixP->fx_subsy) == seg && ! fixP->fx_pcrel)
+ value += MD_PCREL_FROM_SECTION (fixP, seg);
}
- if (fixp->fx_addsy != NULL)
+ if (fixP->fx_addsy != NULL)
{
- if ((fixp->fx_subsy != NULL
- && S_GET_SEGMENT (fixp->fx_addsy) == S_GET_SEGMENT (fixp->fx_subsy)
- && SEG_NORMAL (S_GET_SEGMENT(fixp->fx_addsy)))
- || (S_GET_SEGMENT (fixp->fx_addsy) == seg
- && fixp->fx_pcrel && TC_RELOC_RTSYM_LOC_FIXUP (fixp))
- || (!fixp->fx_pcrel
- && S_GET_SEGMENT (fixp->fx_addsy) == absolute_section)
- || (S_GET_SEGMENT (fixp->fx_addsy) != undefined_section
- && !bfd_is_com_section (S_GET_SEGMENT (fixp->fx_addsy))
- && TC_FIX_ADJUSTABLE(fixp)))
- value -= S_GET_VALUE (fixp->fx_addsy);
-
- if (fixp->fx_pcrel)
- value += fixp->fx_frag->fr_address + fixp->fx_where;
+ if ((fixP->fx_subsy != NULL
+ && S_GET_SEGMENT (fixP->fx_addsy) == S_GET_SEGMENT (fixP->fx_subsy)
+ && SEG_NORMAL (S_GET_SEGMENT(fixP->fx_addsy)))
+ || (S_GET_SEGMENT (fixP->fx_addsy) == seg
+ && fixP->fx_pcrel && TC_RELOC_RTSYM_LOC_FIXUP (fixP))
+ || (!fixP->fx_pcrel
+ && S_GET_SEGMENT (fixP->fx_addsy) == absolute_section)
+ || (S_GET_SEGMENT (fixP->fx_addsy) != undefined_section
+ && !bfd_is_com_section (S_GET_SEGMENT (fixP->fx_addsy))
+ && TC_FIX_ADJUSTABLE(fixP)))
+ value -= S_GET_VALUE (fixP->fx_addsy);
+
+ if (fixP->fx_pcrel)
+ value += fixP->fx_frag->fr_address + fixP->fx_where;
}
else
- fixp->fx_done = 1;
+ fixP->fx_done = 1;
- if ((int) fixp->fx_r_type >= (int) BFD_RELOC_UNUSED)
+ if ((int) fixP->fx_r_type >= (int) BFD_RELOC_UNUSED)
{
const struct s390_operand *operand;
int opindex;
- opindex = (int) fixp->fx_r_type - (int) BFD_RELOC_UNUSED;
+ opindex = (int) fixP->fx_r_type - (int) BFD_RELOC_UNUSED;
operand = &s390_operands[opindex];
- if (fixp->fx_done)
+ if (fixP->fx_done)
{
/* Insert the fully resolved operand value. */
s390_insert_operand (where, operand, (offsetT) value,
- fixp->fx_file, fixp->fx_line);
-
- return 1;
+ fixP->fx_file, fixP->fx_line);
+ return;
}
/* Determine a BFD reloc value based on the operand information.
We are only prepared to turn a few of the operands into
relocs. */
- fixp->fx_offset = value;
+ fixP->fx_offset = value;
if (operand->bits == 12 && operand->shift == 20)
{
- fixp->fx_size = 2;
- fixp->fx_where += 2;
- fixp->fx_r_type = BFD_RELOC_390_12;
+ fixP->fx_size = 2;
+ fixP->fx_where += 2;
+ fixP->fx_r_type = BFD_RELOC_390_12;
}
else if (operand->bits == 12 && operand->shift == 36)
{
- fixp->fx_size = 2;
- fixp->fx_where += 4;
- fixp->fx_r_type = BFD_RELOC_390_12;
+ fixP->fx_size = 2;
+ fixP->fx_where += 4;
+ fixP->fx_r_type = BFD_RELOC_390_12;
}
else if (operand->bits == 8 && operand->shift == 8)
{
- fixp->fx_size = 1;
- fixp->fx_where += 1;
- fixp->fx_r_type = BFD_RELOC_8;
+ fixP->fx_size = 1;
+ fixP->fx_where += 1;
+ fixP->fx_r_type = BFD_RELOC_8;
}
else if (operand->bits == 16 && operand->shift == 16)
{
- fixp->fx_size = 2;
- fixp->fx_where += 2;
+ fixP->fx_size = 2;
+ fixP->fx_where += 2;
if (operand->flags & S390_OPERAND_PCREL)
{
- fixp->fx_r_type = BFD_RELOC_390_PC16DBL;
- fixp->fx_offset += 2;
+ fixP->fx_r_type = BFD_RELOC_390_PC16DBL;
+ fixP->fx_offset += 2;
}
else
- fixp->fx_r_type = BFD_RELOC_16;
+ fixP->fx_r_type = BFD_RELOC_16;
}
else if (operand->bits == 32 && operand->shift == 16
&& (operand->flags & S390_OPERAND_PCREL))
{
- fixp->fx_size = 4;
- fixp->fx_where += 2;
- fixp->fx_offset += 2;
- fixp->fx_r_type = BFD_RELOC_390_PC32DBL;
+ fixP->fx_size = 4;
+ fixP->fx_where += 2;
+ fixP->fx_offset += 2;
+ fixP->fx_r_type = BFD_RELOC_390_PC32DBL;
}
else
{
@@ -1794,29 +1792,29 @@ md_apply_fix3 (fixp, valuep, seg)
/* Use expr_symbol_where to see if this is an expression
symbol. */
- if (expr_symbol_where (fixp->fx_addsy, &sfile, &sline))
- as_bad_where (fixp->fx_file, fixp->fx_line,
+ if (expr_symbol_where (fixP->fx_addsy, &sfile, &sline))
+ as_bad_where (fixP->fx_file, fixP->fx_line,
_("unresolved expression that must be resolved"));
else
- as_bad_where (fixp->fx_file, fixp->fx_line,
+ as_bad_where (fixP->fx_file, fixP->fx_line,
_("unsupported relocation type"));
- fixp->fx_done = 1;
- return 1;
+ fixP->fx_done = 1;
+ return;
}
}
else
{
- switch (fixp->fx_r_type)
+ switch (fixP->fx_r_type)
{
case BFD_RELOC_8:
- if (fixp->fx_pcrel)
+ if (fixP->fx_pcrel)
abort ();
- if (fixp->fx_done)
+ if (fixP->fx_done)
md_number_to_chars (where, value, 1);
break;
case BFD_RELOC_390_12:
case BFD_RELOC_390_GOT12:
- if (fixp->fx_done)
+ if (fixP->fx_done)
{
unsigned short mop;
@@ -1830,45 +1828,45 @@ md_apply_fix3 (fixp, valuep, seg)
case BFD_RELOC_GPREL16:
case BFD_RELOC_16_GOT_PCREL:
case BFD_RELOC_16_GOTOFF:
- if (fixp->fx_pcrel)
- as_bad_where (fixp->fx_file, fixp->fx_line,
+ if (fixP->fx_pcrel)
+ as_bad_where (fixP->fx_file, fixP->fx_line,
"cannot emit PC relative %s relocation%s%s",
- bfd_get_reloc_code_name (fixp->fx_r_type),
- fixp->fx_addsy != NULL ? " against " : "",
- (fixp->fx_addsy != NULL
- ? S_GET_NAME (fixp->fx_addsy)
+ bfd_get_reloc_code_name (fixP->fx_r_type),
+ fixP->fx_addsy != NULL ? " against " : "",
+ (fixP->fx_addsy != NULL
+ ? S_GET_NAME (fixP->fx_addsy)
: ""));
- if (fixp->fx_done)
+ if (fixP->fx_done)
md_number_to_chars (where, value, 2);
break;
case BFD_RELOC_390_GOT16:
- if (fixp->fx_done)
+ if (fixP->fx_done)
md_number_to_chars (where, value, 2);
break;
case BFD_RELOC_390_PC16DBL:
case BFD_RELOC_390_PLT16DBL:
value += 2;
- if (fixp->fx_done)
+ if (fixP->fx_done)
md_number_to_chars (where, (offsetT) value >> 1, 2);
break;
case BFD_RELOC_32:
- if (fixp->fx_pcrel)
- fixp->fx_r_type = BFD_RELOC_32_PCREL;
+ if (fixP->fx_pcrel)
+ fixP->fx_r_type = BFD_RELOC_32_PCREL;
else
- fixp->fx_r_type = BFD_RELOC_32;
- if (fixp->fx_done)
+ fixP->fx_r_type = BFD_RELOC_32;
+ if (fixP->fx_done)
md_number_to_chars (where, value, 4);
break;
case BFD_RELOC_32_PCREL:
case BFD_RELOC_32_BASEREL:
- fixp->fx_r_type = BFD_RELOC_32_PCREL;
- if (fixp->fx_done)
+ fixP->fx_r_type = BFD_RELOC_32_PCREL;
+ if (fixP->fx_done)
md_number_to_chars (where, value, 4);
break;
case BFD_RELOC_32_GOT_PCREL:
case BFD_RELOC_390_PLT32:
- if (fixp->fx_done)
+ if (fixP->fx_done)
md_number_to_chars (where, value, 4);
break;
case BFD_RELOC_390_PC32DBL:
@@ -1876,58 +1874,56 @@ md_apply_fix3 (fixp, valuep, seg)
case BFD_RELOC_390_GOTPCDBL:
case BFD_RELOC_390_GOTENT:
value += 2;
- if (fixp->fx_done)
+ if (fixP->fx_done)
md_number_to_chars (where, (offsetT) value >> 1, 4);
break;
case BFD_RELOC_32_GOTOFF:
- if (fixp->fx_done)
+ if (fixP->fx_done)
md_number_to_chars (where, value, sizeof (int));
break;
case BFD_RELOC_390_GOT64:
case BFD_RELOC_390_PLT64:
- if (fixp->fx_done)
+ if (fixP->fx_done)
md_number_to_chars (where, value, 8);
break;
case BFD_RELOC_64:
- if (fixp->fx_pcrel)
- fixp->fx_r_type = BFD_RELOC_64_PCREL;
+ if (fixP->fx_pcrel)
+ fixP->fx_r_type = BFD_RELOC_64_PCREL;
else
- fixp->fx_r_type = BFD_RELOC_64;
- if (fixp->fx_done)
+ fixP->fx_r_type = BFD_RELOC_64;
+ if (fixP->fx_done)
md_number_to_chars (where, value, 8);
break;
case BFD_RELOC_64_PCREL:
- fixp->fx_r_type = BFD_RELOC_64_PCREL;
- if (fixp->fx_done)
+ fixP->fx_r_type = BFD_RELOC_64_PCREL;
+ if (fixP->fx_done)
md_number_to_chars (where, value, 8);
break;
case BFD_RELOC_VTABLE_INHERIT:
case BFD_RELOC_VTABLE_ENTRY:
- fixp->fx_done = 0;
- return 1;
+ fixP->fx_done = 0;
+ return;
default:
{
- const char *reloc_name = bfd_get_reloc_code_name (fixp->fx_r_type);
+ const char *reloc_name = bfd_get_reloc_code_name (fixP->fx_r_type);
if (reloc_name != NULL)
fprintf (stderr, "Gas failure, reloc type %s\n", reloc_name);
else
- fprintf (stderr, "Gas failure, reloc type #%i\n", fixp->fx_r_type);
+ fprintf (stderr, "Gas failure, reloc type #%i\n", fixP->fx_r_type);
fflush (stderr);
abort ();
}
}
- fixp->fx_offset = value;
+ fixP->fx_offset = value;
}
-
- return 1;
}
/* Generate a reloc for a fixup. */