summaryrefslogtreecommitdiff
path: root/gas/config
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@novell.com>2005-05-27 06:25:22 +0000
committerJan Beulich <jbeulich@novell.com>2005-05-27 06:25:22 +0000
commit52224ba2ad468299bf55bd2ee54b1c0bd6fe699c (patch)
tree0204e87ad8f8113fb4cbe2425d73d501ea88a537 /gas/config
parent1fc83aa86523ad3a570557842a4062c95f868475 (diff)
downloadbinutils-redhat-52224ba2ad468299bf55bd2ee54b1c0bd6fe699c.tar.gz
gas/
2005-05-27 Jan Beulich <jbeulich@novell.com> * config/tc-ia64.c (emit_one_bundle): Restrict scope of ptr, end_ptr, and last_ptr. Check all in-use slots for first one with non-NULL unwind_record. Don't reload end_ptr before second update round.
Diffstat (limited to 'gas/config')
-rw-r--r--gas/config/tc-ia64.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/gas/config/tc-ia64.c b/gas/config/tc-ia64.c
index 25223a1f73..0f57811b8d 100644
--- a/gas/config/tc-ia64.c
+++ b/gas/config/tc-ia64.c
@@ -6479,7 +6479,6 @@ emit_one_bundle ()
struct ia64_opcode *idesc;
int end_of_insn_group = 0, user_template = -1;
int n, i, j, first, curr, last_slot;
- unw_rec_list *ptr, *last_ptr, *end_ptr;
bfd_vma t0 = 0, t1 = 0;
struct label_fix *lfix;
struct insn_fix *ifix;
@@ -6534,7 +6533,9 @@ emit_one_bundle ()
for (i = 0; i < 3 && md.num_slots_in_use > 0; ++i)
{
/* If we have unwind records, we may need to update some now. */
- ptr = md.slot[curr].unwind_record;
+ unw_rec_list *ptr = md.slot[curr].unwind_record;
+ unw_rec_list *end_ptr = NULL;
+
if (ptr)
{
/* Find the last prologue/body record in the list for the current
@@ -6544,9 +6545,11 @@ emit_one_bundle ()
issued. This matters because there may have been nops emitted
meanwhile. Any non-prologue non-body record followed by a
prologue/body record must also refer to the current point. */
- last_ptr = NULL;
- end_ptr = md.slot[(curr + 1) % NUM_SLOTS].unwind_record;
- for (; ptr != end_ptr; ptr = ptr->next)
+ unw_rec_list *last_ptr;
+
+ for (j = 1; end_ptr == NULL && j < md.num_slots_in_use; ++j)
+ end_ptr = md.slot[(curr + j) % NUM_SLOTS].unwind_record;
+ for (last_ptr = NULL; ptr != end_ptr; ptr = ptr->next)
if (ptr->r.type == prologue || ptr->r.type == prologue_gr
|| ptr->r.type == body)
last_ptr = ptr;
@@ -6814,7 +6817,6 @@ emit_one_bundle ()
/* Set slot numbers for all remaining unwind records belonging to the
current insn. There can not be any prologue/body unwind records
here. */
- end_ptr = md.slot[(curr + 1) % NUM_SLOTS].unwind_record;
for (; ptr != end_ptr; ptr = ptr->next)
{
ptr->slot_number = (unsigned long) f + i;