Lines Matching defs:unwind

135     /* The following pseudo-registers are used for unwind directives only:  */
264 /* What to do when something is wrong with unwind directives. */
619 /* unwind-related constants: */
628 /* unwind-related registers: */
649 {".IA_64.unwind"}, {".IA_64.unwind_info"},
727 unwind records. */
764 /* Maintain a list of unwind entries for the current function. */
768 /* Any unwind entries that should be attached to the current slot
772 /* These are used to create the unwind table entry for this function. */
774 symbolS *info; /* pointer to unwind info */
778 unsigned int force_unwind_entry : 1; /* force generation of unwind entry? */
780 /* TRUE if processing unwind directives in a prologue region. */
792 } unwind;
903 if (STREQ ("unwind"))
982 /* In case there are unwind directives following the last instruction,
985 for (ptr = unwind.current_entry; ptr; ptr = ptr->next)
1018 unwind.current_entry = NULL;
1693 if (unwind.pending_saves)
1698 for (cur = unwind.list, prev = NULL; cur; )
1699 if (&cur->r.record.p == unwind.pending_saves)
1704 unwind.list = cur->next;
1705 if (cur == unwind.tail)
1706 unwind.tail = prev;
1707 if (cur == unwind.current_entry)
1708 unwind.current_entry = cur->next;
1732 unwind.pending_saves = NULL;
1749 /* Dummy unwind record used for calculating the length of the last prologue or
1921 unwind.pending_saves = &ptr->r.record.p;
1944 unwind.pending_saves = &cur->r.record.p;
1985 unwind.pending_saves = &ptr->r.record.p;
2011 unwind.pending_saves = &ptr->r.record.p;
2035 unwind.pending_saves = &ptr->r.record.p;
2060 unwind.pending_saves = &ptr->r.record.p;
2767 /* Optimize unwind record directives. */
2775 /* If the only unwind record is ".prologue" or ".prologue" followed
2776 by ".body", then we can optimize the unwind directives away. */
2800 as_bad (_("Insn slot not set in unwind record."));
2934 to handle here, which is the unwind info frag. */
2966 normal fill frag with the unwind image from the record list. */
2994 unwind.personality_routine. */
3000 /* 32-bit unwind info block. */
3020 /* Fill the unwind personality with zeros. */
3201 a procedure but the unwind directive check is set to warning, 0 if
3202 a directive isn't in a procedure and the unwind directive check is set
3208 if (unwind.proc_pending.sym
3209 && (!unwind.saved_text_seg || strcmp (directive, "endp") == 0))
3215 a prologue but the unwind directive check is set to warning, 0 if
3216 a directive isn't in a prologue and the unwind directive check is set
3224 if (in > 0 && !unwind.prologue)
3231 a body but the unwind directive check is set to warning, 0 if
3232 a directive isn't in a body and the unwind directive check is set
3240 if (in > 0 && !unwind.body)
3250 if (unwind.tail)
3251 unwind.tail->next = ptr;
3253 unwind.list = ptr;
3254 unwind.tail = ptr;
3256 /* The current entry can in fact be a chain of unwind entries. */
3257 if (unwind.current_entry == NULL)
3258 unwind.current_entry = ptr;
3261 /* The current entry can in fact be a chain of unwind entries. */
3262 if (unwind.current_entry == NULL)
3263 unwind.current_entry = ptr;
3280 as_warn (_("Tags on unwind pseudo-ops aren't supported, yet"));
3326 if (! (unwind.prologue_mask & 2))
3328 else if (reg != unwind.prologue_gr
3329 + (unsigned) popcount (unwind.prologue_mask & -(2 << 1)))
3408 if (! (unwind.prologue_mask & 4))
3410 else if (reg2 != unwind.prologue_gr
3411 + (unsigned) popcount (unwind.prologue_mask & -(4 << 1)))
3420 if (! (unwind.prologue_mask & 8))
3422 else if (reg2 != unwind.prologue_gr)
3427 if (! (unwind.prologue_mask & 1))
3429 else if (reg2 != unwind.prologue_gr
3430 + (unsigned) popcount (unwind.prologue_mask & -(1 << 1)))
3471 ecount = unwind.prologue_count - 1;
3473 if (ecount >= unwind.prologue_count)
3476 ecount + 1, unwind.prologue_count);
3482 if (ecount < unwind.prologue_count)
3483 unwind.prologue_count -= ecount + 1;
3485 unwind.prologue_count = 0;
3520 Use a slightly ugly scheme to derive the unwind section names from
3523 text sect. unwind table sect.
3526 .text .IA_64.unwind
3527 .text.foo .IA_64.unwind.text.foo
3528 .foo .IA_64.unwind.foo
3536 (a) An object file with unwind info only in .text will use
3537 unwind section names .IA_64.unwind and .IA_64.unwind_info.
3541 (b) An object file with unwind info in multiple text sections
3542 will use separate unwind sections for each text section.
3546 containing unwind info (as might be the case for certain
3561 as_bad (_("Illegal section name `%s' (causes unwind section name clash)"),
3569 /* Build the unwind section name by appending the (possibly stripped)
3570 text section name to the unwind prefix. */
3617 /* Mark the end of the unwind info, so that we can compute the size of the
3618 last unwind region. */
3621 /* Force out pending instructions, to make sure all unwind records have
3625 /* Generate the unwind record. */
3626 list = optimize_unw_records (unwind.list);
3630 if (size > 0 || unwind.force_unwind_entry)
3632 unwind.force_unwind_entry = 0;
3640 if (unwind.personality_routine)
3644 /* If there are unwind records, switch sections, and output the info. */
3657 /* Set expression which points to start of unwind descriptor area. */
3658 unwind.info = expr_build_dot ();
3661 (offsetT) (long) unwind.personality_routine,
3665 if (unwind.personality_routine != 0)
3668 exp.X_add_symbol = unwind.personality_routine;
3688 unwind.personality_routine = 0;
3693 unwind.list = unwind.tail = unwind.current_entry = NULL;
3701 unwind.force_unwind_entry = 1;
3704 unwind.saved_text_seg = now_seg;
3705 unwind.saved_text_subseg = now_subseg;
3707 /* Generate unwind info into unwind-info section and then leave that
3709 the language specific data area of the unwind info block. */
3719 unwind.force_unwind_entry = 1;
4083 label_prologue_count *lpc = unwind.saved_prologue_counts;
4098 label_prologue_count *lpc = unwind.saved_prologue_counts;
4109 new_lpc->next = unwind.saved_prologue_counts;
4112 unwind.saved_prologue_counts = new_lpc;
4119 label_prologue_count *lpc = unwind.saved_prologue_counts;
4129 unwind.saved_prologue_counts = NULL;
4142 save_prologue_count (e.X_add_number, unwind.prologue_count);
4161 unwind.prologue_count = get_saved_prologue_count (e.X_add_number);
4210 unwind.personality_routine = symbol_find_or_make (name);
4211 unwind.force_unwind_entry = 1;
4224 if (unwind.proc_pending.sym)
4229 while (unwind.proc_pending.next)
4231 pending = unwind.proc_pending.next;
4232 unwind.proc_pending.next = pending->next;
4254 unwind.proc_pending.sym = sym;
4255 last_pending = &unwind.proc_pending;
4273 unwind.proc_pending.sym = expr_build_dot ();
4274 last_pending = &unwind.proc_pending;
4280 unwind.prologue = 0;
4281 unwind.prologue_count = 0;
4282 unwind.body = 0;
4283 unwind.insn = 0;
4284 unwind.list = unwind.tail = unwind.current_entry = NULL;
4285 unwind.personality_routine = 0;
4293 if (!unwind.prologue && !unwind.body && unwind.insn)
4297 unwind.prologue = 0;
4298 unwind.prologue_mask = 0;
4299 unwind.body = 1;
4311 if (unwind.prologue)
4317 if (!unwind.body && unwind.insn)
4367 unwind.prologue = 1;
4368 unwind.prologue_mask = mask;
4369 unwind.prologue_gr = grsave;
4370 unwind.body = 0;
4371 ++unwind.prologue_count;
4390 if (unwind.saved_text_seg)
4392 saved_seg = unwind.saved_text_seg;
4393 saved_subseg = unwind.saved_text_subseg;
4394 unwind.saved_text_seg = NULL;
4405 if (!unwind.info)
4408 if (unwind.info || unwind.force_unwind_entry)
4422 and unwind info. */
4431 if (!S_IS_LOCAL (unwind.proc_pending.sym)
4432 && S_IS_DEFINED (unwind.proc_pending.sym))
4434 = symbol_temp_new (S_GET_SEGMENT (unwind.proc_pending.sym),
4435 symbol_get_frag (unwind.proc_pending.sym),
4436 S_GET_VALUE (unwind.proc_pending.sym));
4438 e.X_add_symbol = unwind.proc_pending.sym;
4449 if (unwind.info)
4454 e.X_add_symbol = unwind.info;
4462 pending = &unwind.proc_pending;
4511 for (pending = &unwind.proc_pending; pending; pending = pending->next)
4532 if (unwind.proc_pending.sym
4533 && S_GET_NAME (unwind.proc_pending.sym)
4534 && strcmp (S_GET_NAME (unwind.proc_pending.sym), FAKE_LABEL_NAME))
4536 S_GET_NAME (unwind.proc_pending.sym));
4537 while (unwind.proc_pending.next)
4539 pending = unwind.proc_pending.next;
4540 unwind.proc_pending.next = pending->next;
4543 unwind.proc_pending.sym = unwind.info = NULL;
5215 { "ia_64.unwind", dot_special_section, SPECIAL_SECTION_UNWIND },
6562 /* If we have unwind records, we may need to update some now. */
6868 /* Set slot numbers for all remaining unwind records belonging to the
6869 current insn. There can not be any prologue/body unwind records
7009 else if (startswith (arg, "unwind-check="))
7155 unwind directive check (default -munwind-check=warning)\n\
7463 /* pseudo-registers used to specify unwind info: */
10824 /* Add unwind entries, if there are any. */
10825 if (unwind.current_entry)
10827 CURR_SLOT.unwind_record = unwind.current_entry;
10828 unwind.current_entry = NULL;
10830 if (unwind.pending_saves)
10832 if (unwind.pending_saves->next)
10836 add_unwind_entry (unwind.pending_saves->next, NOT_A_CHAR);
10837 unwind.pending_saves = &unwind.pending_saves->next->r.record.p;
10840 unwind.pending_saves = NULL;
10842 if (unwind.proc_pending.sym && S_IS_DEFINED (unwind.proc_pending.sym))
10843 unwind.insn = 1;