diff options
author | Alan Modra <amodra@gmail.com> | 2001-01-30 13:13:29 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2001-01-30 13:13:29 +0000 |
commit | 22862cde861eb154c42dede997eaeda3abdc0e03 (patch) | |
tree | 5bc48392d6a2d4a51b6479cf9f13f6bd029934cd /gas/config/tc-hppa.c | |
parent | 9540464302fbf77b83c628bb54165020d9375f6e (diff) | |
download | gdb-22862cde861eb154c42dede997eaeda3abdc0e03.zip gdb-22862cde861eb154c42dede997eaeda3abdc0e03.tar.gz gdb-22862cde861eb154c42dede997eaeda3abdc0e03.tar.bz2 |
Fix a null-pointer dereference and some range checks.
Diffstat (limited to 'gas/config/tc-hppa.c')
-rw-r--r-- | gas/config/tc-hppa.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c index f87b57a..568becd 100644 --- a/gas/config/tc-hppa.c +++ b/gas/config/tc-hppa.c @@ -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; } |