Fix a null-pointer dereference and some range checks.

This commit is contained in:
Alan Modra 2001-01-30 13:13:29 +00:00
parent 9540464302
commit 22862cde86
2 changed files with 15 additions and 13 deletions

View File

@ -1,3 +1,8 @@
2001-01-30 Alan Modra <alan@linuxcare.com.au>
* config/tc-hppa.c (pa_ip): Support 12 bit branches to absolute
destinations. Correct range check for 17 and 22 bit branches.
2001-01-25 Nick Clifton <nickc@redhat.com>
* config/tc-m68k.c (tc_gen_reloc): Do not abort if tcbit is

View File

@ -3193,7 +3193,9 @@ pa_ip (str)
get_expression (s);
s = expr_end;
the_insn.pcrel = 1;
if (!strcmp (S_GET_NAME (the_insn.exp.X_add_symbol), "L$0\001"))
if (!the_insn.exp.X_add_symbol
|| !strcmp (S_GET_NAME (the_insn.exp.X_add_symbol),
"L$0\001"))
{
num = evaluate_absolute (&the_insn);
if (num % 4)
@ -3201,9 +3203,10 @@ pa_ip (str)
as_bad (_("Branch to unaligned address"));
break;
}
CHECK_FIELD (num, 8199, -8184, 0);
opcode |= re_assemble_12 ((num - 8) >> 2);
if (the_insn.exp.X_add_symbol)
num -= 8;
CHECK_FIELD (num, 8191, -8192, 0);
opcode |= re_assemble_12 (num >> 2);
continue;
}
else
@ -3232,11 +3235,9 @@ pa_ip (str)
as_bad (_("Branch to unaligned address"));
break;
}
CHECK_FIELD (num, 262143, -262144, 0);
if (the_insn.exp.X_add_symbol)
num -= 8;
CHECK_FIELD (num, 262143, -262144, 0);
opcode |= re_assemble_17 (num >> 2);
continue;
}
@ -3265,11 +3266,9 @@ pa_ip (str)
as_bad (_("Branch to unaligned address"));
break;
}
CHECK_FIELD (num, 8388607, -8388608, 0);
if (the_insn.exp.X_add_symbol)
num -= 8;
CHECK_FIELD (num, 8388607, -8388608, 0);
opcode |= re_assemble_22 (num >> 2);
}
else
@ -3297,11 +3296,9 @@ pa_ip (str)
as_bad (_("Branch to unaligned address"));
break;
}
CHECK_FIELD (num, 262143, -262144, 0);
if (the_insn.exp.X_add_symbol)
num -= 8;
CHECK_FIELD (num, 262143, -262144, 0);
opcode |= re_assemble_17 (num >> 2);
continue;
}