Lines Matching full:action
50 /// Compute the actions table and gather the first action index for each landing
56 // The action table follows the call-site table in the LSDA. The individual
92 unsigned SizeActions = 0; // Total size of all action entries for a function
101 // Size of one action entry (typeid + next action)
132 ActionEntry Action = { ValueForTypeID, NextAction, PrevAction };
133 Actions.push_back(Action);
137 // Record the first action of the landing pad site.
141 // Information used when creating the call-site table. The action record
143 // action record, relative to the start of the actions table. This value is
211 /// containing the call, a non-zero landing pad, and an appropriate action. The
213 /// the landing pad and the action. Calls marked 'nounwind' have no entry and
228 // call-sites following. The action table and type info table will be
319 if (Site.LPad == Prev.LPad && Site.Action == Prev.Action) {
369 /// 2. The action table, in our case, is composed of pairs of type IDs and next
370 /// action offset. Starting with the action index from the landing pad
373 /// pad. Otherwise the next action is looked up. This chain is terminated
374 /// with a next action of zero. If no type id is found then the frame is
405 // Compute the actions table and gather the first action index for each
489 // call-site table (which marks the beginning of the action table).
504 // The Action table follows the call-site table. So we emit the
535 CallSiteTableSize += 12 + getULEB128Size(S.Action);
544 for (const ActionEntry &Action : Actions) {
545 // Each action entry consists of two SLEB128 fields.
546 ActionTableSize += getSLEB128Size(Action.ValueForTypeID) +
547 getSLEB128Size(Action.NextAction);
558 + ActionTableSize; // Action table content.
607 // Offset of the first associated action record, relative to the start of
608 // the action table. This value is biased by 1 (1 indicates the start of
609 // the action table), and 0 indicates that there are no actions.
611 if (S.Action == 0)
612 Asm->OutStreamer->AddComment(" Action: cleanup");
614 Asm->OutStreamer->AddComment(" Action: " +
615 Twine((S.Action - 1) / 2 + 1));
617 Asm->emitULEB128(S.Action);
626 // for a given call, the first corresponding action record and corresponding
636 // * The first action record for that call site.
665 // end label. This offset is used to find the action table.
748 // Offset of the first associated action record, relative to the start
749 // of the action table. This value is biased by 1 (1 indicates the start
750 // of the action table), and 0 indicates that there are no actions.
752 if (S.Action == 0)
753 Asm->OutStreamer->AddComment(" On action: cleanup");
755 Asm->OutStreamer->AddComment(" On action: " +
756 Twine((S.Action - 1) / 2 + 1));
758 Asm->emitULEB128(S.Action);
764 // Emit the Action Table.
766 for (const ActionEntry &Action : Actions) {
768 // Emit comments that decode the action table.
769 Asm->OutStreamer->AddComment(">> Action Record " + Twine(++Entry) + " <<");
777 if (Action.ValueForTypeID > 0)
779 Twine(Action.ValueForTypeID));
780 else if (Action.ValueForTypeID < 0)
782 Twine(Action.ValueForTypeID));
786 Asm->emitSLEB128(Action.ValueForTypeID);
788 // Action Record
790 if (Action.Previous == unsigned(-1)) {
793 Asm->OutStreamer->AddComment(" Continue to action " +
794 Twine(Action.Previous + 1));
797 Asm->emitSLEB128(Action.NextAction);