diff options
author | Jan Beulich <jbeulich@novell.com> | 2005-05-27 06:25:22 +0000 |
---|---|---|
committer | Jan Beulich <jbeulich@novell.com> | 2005-05-27 06:25:22 +0000 |
commit | 75214fb04b4549db978644fc24b5da2c44964122 (patch) | |
tree | 9b28bb939eb5b02976e98f9707f56f08822510c3 /gas/config | |
parent | 79524e0524078a2b8045ff7fd4a9f78033ac1661 (diff) | |
download | gdb-75214fb04b4549db978644fc24b5da2c44964122.zip gdb-75214fb04b4549db978644fc24b5da2c44964122.tar.gz gdb-75214fb04b4549db978644fc24b5da2c44964122.tar.bz2 |
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.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/gas/config/tc-ia64.c b/gas/config/tc-ia64.c index 25223a1..0f57811 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; |