arm64: stacktrace: add stackinfo_on_stack() helper
Factor the core predicate out of on_stack() into a helper which can be used on a pre-populated stack_info. There should be no functional change as a result of this patch. Signed-off-by: Mark Rutland <mark.rutland@arm.com> Reviewed-by: Kalesh Singh <kaleshsingh@google.com> Reviewed-by: Madhavan T. Venkataraman <madvenka@linux.microsoft.com> Reviewed-by: Mark Brown <broonie@kernel.org> Cc: Fuad Tabba <tabba@google.com> Cc: Marc Zyngier <maz@kernel.org> Cc: Will Deacon <will@kernel.org> Link: https://lore.kernel.org/r/20220901130646.1316937-6-mark.rutland@arm.com Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
parent
75758d5114
commit
36f9a8793c
|
@ -65,21 +65,34 @@ struct unwind_state {
|
|||
struct task_struct *task;
|
||||
};
|
||||
|
||||
static inline bool stackinfo_on_stack(const struct stack_info *info,
|
||||
unsigned long sp, unsigned long size)
|
||||
{
|
||||
if (!info->low)
|
||||
return false;
|
||||
|
||||
if (sp < info->low || sp + size < sp || sp + size > info->high)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline bool on_stack(unsigned long sp, unsigned long size,
|
||||
unsigned long low, unsigned long high,
|
||||
enum stack_type type, struct stack_info *info)
|
||||
{
|
||||
if (!low)
|
||||
struct stack_info tmp = {
|
||||
.low = low,
|
||||
.high = high,
|
||||
.type = type,
|
||||
};
|
||||
|
||||
if (!stackinfo_on_stack(&tmp, sp, size))
|
||||
return false;
|
||||
|
||||
if (sp < low || sp + size < sp || sp + size > high)
|
||||
return false;
|
||||
if (info)
|
||||
*info = tmp;
|
||||
|
||||
if (info) {
|
||||
info->low = low;
|
||||
info->high = high;
|
||||
info->type = type;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue