Lines Matching +full:array +full:- +full:nest

1 /* SPDX-License-Identifier: GPL-2.0-only */
20 * struct unwind_state - state used for robust unwinding.
26 * @stacks: An array of stacks which can be unwound.
49 if (!info->low) in stackinfo_on_stack()
52 if (sp < info->low || sp + size < sp || sp + size > info->high) in stackinfo_on_stack()
60 state->stack = stackinfo_get_unknown(); in unwind_init_common()
67 for (int i = 0; i < state->nr_stacks; i++) { in unwind_find_next_stack()
68 struct stack_info *info = &state->stacks[i]; in unwind_find_next_stack()
78 * unwind_consume_stack() - Check if an object is on an accessible stack,
94 if (stackinfo_on_stack(&state->stack, sp, size)) in unwind_consume_stack()
99 return -EINVAL; in unwind_consume_stack()
102 * Stack transitions are strictly one-way, and once we've in unwind_consume_stack()
109 * Note that stacks can nest in several valid orders, e.g. in unwind_consume_stack()
111 * TASK -> IRQ -> OVERFLOW -> SDEI_NORMAL in unwind_consume_stack()
112 * TASK -> SDEI_NORMAL -> SDEI_CRITICAL -> OVERFLOW in unwind_consume_stack()
113 * HYP -> OVERFLOW in unwind_consume_stack()
118 state->stack = *next; in unwind_consume_stack()
126 state->stack.low = sp + size; in unwind_consume_stack()
131 * unwind_next_frame_record() - Unwind to the next frame record.
140 unsigned long fp = state->fp; in unwind_next_frame_record()
144 return -EINVAL; in unwind_next_frame_record()
153 state->fp = READ_ONCE(*(unsigned long *)(fp)); in unwind_next_frame_record()
154 state->pc = READ_ONCE(*(unsigned long *)(fp + 8)); in unwind_next_frame_record()