projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Proced error messages when special data are relocations are used on
[deliverable/binutils-gdb.git]
/
gas
/
config
/
tc-v850.c
diff --git
a/gas/config/tc-v850.c
b/gas/config/tc-v850.c
index b18cf24353da7c56fa975bcfd54b266df1165e1a..df14fe951839f28718a123bed26b0d5bfc020a2e 100644
(file)
--- a/
gas/config/tc-v850.c
+++ b/
gas/config/tc-v850.c
@@
-1045,8
+1045,12
@@
handle_ctoff (const struct v850_operand * operand)
if (operand == NULL)
return BFD_RELOC_V850_CALLT_16_16_OFFSET;
if (operand == NULL)
return BFD_RELOC_V850_CALLT_16_16_OFFSET;
- assert (operand->bits == 6);
- assert (operand->shift == 0);
+ if ( operand->bits != 6
+ || operand->shift == 0)
+ {
+ as_bad ("ctoff() relocation used on an instruction which does not support it");
+ return BFD_RELOC_64; /* Used to indicate an error condition. */
+ }
return BFD_RELOC_V850_CALLT_6_7_OFFSET;
}
return BFD_RELOC_V850_CALLT_6_7_OFFSET;
}
@@
-1061,8
+1065,12
@@
handle_sdaoff (const struct v850_operand * operand)
if (operand->bits == -1) return BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET;
/* end-sanitize-v850e */
if (operand->bits == -1) return BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET;
/* end-sanitize-v850e */
- assert (operand->bits == 16);
- assert (operand->shift == 16);
+ if ( operand->bits != 16
+ || operand->shift == 16)
+ {
+ as_bad ("sdaoff() relocation used on an instruction which does not support it");
+ return BFD_RELOC_64; /* Used to indicate an error condition. */
+ }
return BFD_RELOC_V850_SDA_16_16_OFFSET;
}
return BFD_RELOC_V850_SDA_16_16_OFFSET;
}
@@
-1075,9
+1083,13
@@
handle_zdaoff (const struct v850_operand * operand)
/* start-sanitize-v850e */
if (operand->bits == -1) return BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET;
/* end-sanitize-v850e */
/* start-sanitize-v850e */
if (operand->bits == -1) return BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET;
/* end-sanitize-v850e */
-
- assert (operand->bits == 16);
- assert (operand->shift == 16);
+
+ if ( operand->bits != 16
+ || operand->shift != 16)
+ {
+ as_bad ("zdaoff() relocation used on an instruction which does not support it");
+ return BFD_RELOC_64; /* Used to indicate an error condition. */
+ }
return BFD_RELOC_V850_ZDA_16_16_OFFSET;
}
return BFD_RELOC_V850_ZDA_16_16_OFFSET;
}
@@
-1093,7
+1105,11
@@
handle_tdaoff (const struct v850_operand * operand)
/* end-sanitize-v850e */
if (operand->bits == 16 && operand->shift == 16) return BFD_RELOC_V850_TDA_16_16_OFFSET; /* set1 & chums, operands: D16 */
/* end-sanitize-v850e */
if (operand->bits == 16 && operand->shift == 16) return BFD_RELOC_V850_TDA_16_16_OFFSET; /* set1 & chums, operands: D16 */
- assert (operand->bits == 7);
+ if (operand->bits != 7)
+ {
+ as_bad ("tdaoff() relocation used on an instruction which does not support it");
+ return BFD_RELOC_64; /* Used to indicate an error condition. */
+ }
return operand->insert != NULL
? BFD_RELOC_V850_TDA_7_8_OFFSET /* sld.h/sst.h, operand: D8_7 */
return operand->insert != NULL
? BFD_RELOC_V850_TDA_7_8_OFFSET /* sld.h/sst.h, operand: D8_7 */
@@
-1237,17
+1253,25
@@
md_assemble (str)
hold = input_line_pointer;
input_line_pointer = str;
hold = input_line_pointer;
input_line_pointer = str;
-/* fprintf (stderr, "operand: %s index = %d, opcode = %s\n", input_line_pointer, opindex_ptr - opcode->operands, opcode->name ); */
-
/* lo(), hi(), hi0(), etc... */
if ((reloc = v850_reloc_prefix (operand)) != BFD_RELOC_UNUSED)
{
/* lo(), hi(), hi0(), etc... */
if ((reloc = v850_reloc_prefix (operand)) != BFD_RELOC_UNUSED)
{
+ if (reloc == BFD_RELOC_64) /* This is a fake reloc, used to indicate an error condition. */
+ {
+ match = 1;
+ goto error;
+ }
+
expression (& ex);
if (ex.X_op == O_constant)
{
switch (reloc)
{
expression (& ex);
if (ex.X_op == O_constant)
{
switch (reloc)
{
+ case BFD_RELOC_V850_ZDA_16_16_OFFSET:
+ /* To cope with "not1 7, zdaoff(0xfffff006)[r0]" and the like. */
+ /* Fall through. */
+
case BFD_RELOC_LO16:
{
/* Truncate, then sign extend the value. */
case BFD_RELOC_LO16:
{
/* Truncate, then sign extend the value. */
@@
-1287,9
+1311,10
@@
md_assemble (str)
ex.X_add_number = 0;
break;
/* end-sanitize-v850e */
ex.X_add_number = 0;
break;
/* end-sanitize-v850e */
-
+
default:
default:
- as_bad ( "AAARG -> unhandled constant reloc");
+ fprintf (stderr, "reloc: %d\n", reloc);
+ as_bad ("AAARG -> unhandled constant reloc");
break;
}
break;
}
This page took
0.024069 seconds
and
4
git commands to generate.