struct mm_struct *mm = current->mm;
cc->nr = 0;
+ cc->unw_method = QUADD_UNW_METHOD_FP;
if (!regs || !mm)
return 0;
struct quadd_callchain *cc,
struct quadd_ctx *ctx)
{
- int unw_fp, unw_eht;
+ int unw_fp, unw_eht, nr = 0;
unsigned int extra;
struct quadd_parameters *param = &ctx->param;
cc->unw_rc = 0;
- if (unw_fp) {
- cc->unw_method = QUADD_UNW_METHOD_FP;
- get_user_callchain_fp(regs, cc);
- } else if (unw_eht) {
- cc->unw_method = QUADD_UNW_METHOD_EHT;
- quadd_get_user_callchain_ut(regs, cc);
- }
+ if (unw_eht)
+ nr = quadd_get_user_callchain_ut(regs, cc);
- return cc->nr;
+ if (!nr && unw_fp)
+ nr = get_user_callchain_fp(regs, cc);
+
+ return nr;
}
#ifndef __QUADD_VERSION_H
#define __QUADD_VERSION_H
-#define QUADD_MODULE_VERSION "1.55"
+#define QUADD_MODULE_VERSION "1.56"
#define QUADD_MODULE_BRANCH "Dev"
#endif /* __QUADD_VERSION_H */