Lines Matching defs:unwind

138     /* The following pseudo-registers are used for unwind directives only:  */
267 /* What to do when something is wrong with unwind directives. */
621 /* unwind-related constants: */
630 /* unwind-related registers: */
651 {".IA_64.unwind"}, {".IA_64.unwind_info"},
729 unwind records. */
766 /* Maintain a list of unwind entries for the current function. */
770 /* Any unwind entries that should be attached to the current slot
774 /* These are used to create the unwind table entry for this function. */
776 symbolS *info; /* pointer to unwind info */
780 unsigned int force_unwind_entry : 1; /* force generation of unwind entry? */
782 /* TRUE if processing unwind directives in a prologue region. */
794 } unwind;
905 if (STREQ ("unwind"))
984 /* In case there are unwind directives following the last instruction,
987 for (ptr = unwind.current_entry; ptr; ptr = ptr->next)
1020 unwind.current_entry = NULL;
1695 if (unwind.pending_saves)
1700 for (cur = unwind.list, prev = NULL; cur; )
1701 if (&cur->r.record.p == unwind.pending_saves)
1706 unwind.list = cur->next;
1707 if (cur == unwind.tail)
1708 unwind.tail = prev;
1709 if (cur == unwind.current_entry)
1710 unwind.current_entry = cur->next;
1734 unwind.pending_saves = NULL;
1751 /* Dummy unwind record used for calculating the length of the last prologue or
1925 unwind.pending_saves = &ptr->r.record.p;
1948 unwind.pending_saves = &cur->r.record.p;
1989 unwind.pending_saves = &ptr->r.record.p;
2015 unwind.pending_saves = &ptr->r.record.p;
2039 unwind.pending_saves = &ptr->r.record.p;
2064 unwind.pending_saves = &ptr->r.record.p;
2771 /* Optimize unwind record directives. */
2779 /* If the only unwind record is ".prologue" or ".prologue" followed
2780 by ".body", then we can optimize the unwind directives away. */
2804 as_bad (_("Insn slot not set in unwind record."));
2938 to handle here, which is the unwind info frag. */
2970 normal fill frag with the unwind image from the record list. */
2998 unwind.personality_routine. */
3004 /* 32-bit unwind info block. */
3024 /* Fill the unwind personality with zeros. */
3205 a procedure but the unwind directive check is set to warning, 0 if
3206 a directive isn't in a procedure and the unwind directive check is set
3212 if (unwind.proc_pending.sym
3213 && (!unwind.saved_text_seg || strcmp (directive, "endp") == 0))
3219 a prologue but the unwind directive check is set to warning, 0 if
3220 a directive isn't in a prologue and the unwind directive check is set
3228 if (in > 0 && !unwind.prologue)
3235 a body but the unwind directive check is set to warning, 0 if
3236 a directive isn't in a body and the unwind directive check is set
3244 if (in > 0 && !unwind.body)
3254 if (unwind.tail)
3255 unwind.tail->next = ptr;
3257 unwind.list = ptr;
3258 unwind.tail = ptr;
3260 /* The current entry can in fact be a chain of unwind entries. */
3261 if (unwind.current_entry == NULL)
3262 unwind.current_entry = ptr;
3265 /* The current entry can in fact be a chain of unwind entries. */
3266 if (unwind.current_entry == NULL)
3267 unwind.current_entry = ptr;
3284 as_warn (_("Tags on unwind pseudo-ops aren't supported, yet"));
3330 if (! (unwind.prologue_mask & 2))
3332 else if (reg != unwind.prologue_gr
3333 + (unsigned) popcount (unwind.prologue_mask & -(2 << 1)))
3412 if (! (unwind.prologue_mask & 4))
3414 else if (reg2 != unwind.prologue_gr
3415 + (unsigned) popcount (unwind.prologue_mask & -(4 << 1)))
3424 if (! (unwind.prologue_mask & 8))
3426 else if (reg2 != unwind.prologue_gr)
3431 if (! (unwind.prologue_mask & 1))
3433 else if (reg2 != unwind.prologue_gr
3434 + (unsigned) popcount (unwind.prologue_mask & -(1 << 1)))
3475 ecount = unwind.prologue_count - 1;
3477 if (ecount >= unwind.prologue_count)
3480 ecount + 1, unwind.prologue_count);
3486 if (ecount < unwind.prologue_count)
3487 unwind.prologue_count -= ecount + 1;
3489 unwind.prologue_count = 0;
3524 Use a slightly ugly scheme to derive the unwind section names from
3527 text sect. unwind table sect.
3530 .text .IA_64.unwind
3531 .text.foo .IA_64.unwind.text.foo
3532 .foo .IA_64.unwind.foo
3540 (a) An object file with unwind info only in .text will use
3541 unwind section names .IA_64.unwind and .IA_64.unwind_info.
3545 (b) An object file with unwind info in multiple text sections
3546 will use separate unwind sections for each text section.
3550 containing unwind info (as might be the case for certain
3565 as_bad (_("Illegal section name `%s' (causes unwind section name clash)"),
3573 /* Build the unwind section name by appending the (possibly stripped)
3574 text section name to the unwind prefix. */
3622 /* Mark the end of the unwind info, so that we can compute the size of the
3623 last unwind region. */
3626 /* Force out pending instructions, to make sure all unwind records have
3630 /* Generate the unwind record. */
3631 list = optimize_unw_records (unwind.list);
3635 if (size > 0 || unwind.force_unwind_entry)
3637 unwind.force_unwind_entry = 0;
3645 if (unwind.personality_routine)
3649 /* If there are unwind records, switch sections, and output the info. */
3662 /* Set expression which points to start of unwind descriptor area. */
3663 unwind.info = expr_build_dot ();
3666 (offsetT) (long) unwind.personality_routine,
3670 if (unwind.personality_routine != 0)
3673 exp.X_add_symbol = unwind.personality_routine;
3693 unwind.personality_routine = 0;
3698 unwind.list = unwind.tail = unwind.current_entry = NULL;
3706 unwind.force_unwind_entry = 1;
3709 unwind.saved_text_seg = now_seg;
3710 unwind.saved_text_subseg = now_subseg;
3712 /* Generate unwind info into unwind-info section and then leave that
3714 the language specific data area of the unwind info block. */
3724 unwind.force_unwind_entry = 1;
4088 label_prologue_count *lpc = unwind.saved_prologue_counts;
4103 label_prologue_count *lpc = unwind.saved_prologue_counts;
4114 new_lpc->next = unwind.saved_prologue_counts;
4117 unwind.saved_prologue_counts = new_lpc;
4124 label_prologue_count *lpc = unwind.saved_prologue_counts;
4134 unwind.saved_prologue_counts = NULL;
4147 save_prologue_count (e.X_add_number, unwind.prologue_count);
4166 unwind.prologue_count = get_saved_prologue_count (e.X_add_number);
4215 unwind.personality_routine = symbol_find_or_make (name);
4216 unwind.force_unwind_entry = 1;
4229 if (unwind.proc_pending.sym)
4234 while (unwind.proc_pending.next)
4236 pending = unwind.proc_pending.next;
4237 unwind.proc_pending.next = pending->next;
4259 unwind.proc_pending.sym = sym;
4260 last_pending = &unwind.proc_pending;
4278 unwind.proc_pending.sym = expr_build_dot ();
4279 last_pending = &unwind.proc_pending;
4285 unwind.prologue = 0;
4286 unwind.prologue_count = 0;
4287 unwind.body = 0;
4288 unwind.insn = 0;
4289 unwind.list = unwind.tail = unwind.current_entry = NULL;
4290 unwind.personality_routine = 0;
4298 if (!unwind.prologue && !unwind.body && unwind.insn)
4302 unwind.prologue = 0;
4303 unwind.prologue_mask = 0;
4304 unwind.body = 1;
4316 if (unwind.prologue)
4322 if (!unwind.body && unwind.insn)
4372 unwind.prologue = 1;
4373 unwind.prologue_mask = mask;
4374 unwind.prologue_gr = grsave;
4375 unwind.body = 0;
4376 ++unwind.prologue_count;
4395 if (unwind.saved_text_seg)
4397 saved_seg = unwind.saved_text_seg;
4398 saved_subseg = unwind.saved_text_subseg;
4399 unwind.saved_text_seg = NULL;
4410 if (!unwind.info)
4413 if (unwind.info || unwind.force_unwind_entry)
4427 and unwind info. */
4436 if (!S_IS_LOCAL (unwind.proc_pending.sym)
4437 && S_IS_DEFINED (unwind.proc_pending.sym))
4438 e.X_add_symbol = symbol_temp_new (S_GET_SEGMENT (unwind.proc_pending.sym),
4439 S_GET_VALUE (unwind.proc_pending.sym),
4440 symbol_get_frag (unwind.proc_pending.sym));
4442 e.X_add_symbol = unwind.proc_pending.sym;
4453 if (unwind.info)
4458 e.X_add_symbol = unwind.info;
4466 pending = &unwind.proc_pending;
4515 for (pending = &unwind.proc_pending; pending; pending = pending->next)
4536 if (unwind.proc_pending.sym
4537 && S_GET_NAME (unwind.proc_pending.sym)
4538 && strcmp (S_GET_NAME (unwind.proc_pending.sym), FAKE_LABEL_NAME))
4540 S_GET_NAME (unwind.proc_pending.sym));
4541 while (unwind.proc_pending.next)
4543 pending = unwind.proc_pending.next;
4544 unwind.proc_pending.next = pending->next;
4547 unwind.proc_pending.sym = unwind.info = NULL;
5230 { "ia_64.unwind", dot_special_section, SPECIAL_SECTION_UNWIND },
6578 /* If we have unwind records, we may need to update some now. */
6884 /* Set slot numbers for all remaining unwind records belonging to the
6885 current insn. There can not be any prologue/body unwind records
7010 else if (strncmp (arg, "unwind-check=", 13) == 0)
7156 unwind directive check (default -munwind-check=warning)\n\
7470 /* pseudo-registers used to specify unwind info: */
10835 /* Add unwind entries, if there are any. */
10836 if (unwind.current_entry)
10838 CURR_SLOT.unwind_record = unwind.current_entry;
10839 unwind.current_entry = NULL;
10841 if (unwind.pending_saves)
10843 if (unwind.pending_saves->next)
10847 add_unwind_entry (unwind.pending_saves->next, NOT_A_CHAR);
10848 unwind.pending_saves = &unwind.pending_saves->next->r.record.p;
10851 unwind.pending_saves = NULL;
10853 if (unwind.proc_pending.sym && S_IS_DEFINED (unwind.proc_pending.sym))
10854 unwind.insn = 1;