diff options
author | Igor Nabirushkin <inabirushkin@nvidia.com> | 2014-03-03 11:52:22 +0400 |
---|---|---|
committer | Riham Haidar <rhaidar@nvidia.com> | 2014-03-06 12:31:22 -0800 |
commit | 00d022623c13da6b0a77ea1bfb2ee7fbee981e50 (patch) | |
tree | 6aa9cb0dad43195bf3f3c766e20acfa9e34ebc43 | |
parent | ccde0304ffcf4a1cb75bad78507597edc1d69290 (diff) |
misc: tegra-profiler: unwinding: add auto mode
Tegra Profiler: automatic selection of unwinding
method (frame pointers or exception-handling tables)
Bug 1465331
Change-Id: I8ae85e78b32198c685aab44102f919f33a2bad55
Signed-off-by: Igor Nabirushkin <inabirushkin@nvidia.com>
Reviewed-on: http://git-master/r/377155
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Tested-by: Maxim Morin <mmorin@nvidia.com>
Reviewed-by: Raymond Poudrier <rapoudrier@nvidia.com>
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
-rw-r--r-- | drivers/misc/tegra-profiler/backtrace.c | 17 | ||||
-rw-r--r-- | drivers/misc/tegra-profiler/eh_unwind.c | 1 | ||||
-rw-r--r-- | drivers/misc/tegra-profiler/version.h | 2 |
3 files changed, 10 insertions, 10 deletions
diff --git a/drivers/misc/tegra-profiler/backtrace.c b/drivers/misc/tegra-profiler/backtrace.c index c8cc5f7cc0d0..7948c97421f0 100644 --- a/drivers/misc/tegra-profiler/backtrace.c +++ b/drivers/misc/tegra-profiler/backtrace.c @@ -95,6 +95,7 @@ get_user_callchain_fp(struct pt_regs *regs, struct mm_struct *mm = current->mm; cc->nr = 0; + cc->unw_method = QUADD_UNW_METHOD_FP; if (!regs || !mm) return 0; @@ -168,7 +169,7 @@ quadd_get_user_callchain(struct pt_regs *regs, 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; @@ -184,13 +185,11 @@ quadd_get_user_callchain(struct pt_regs *regs, 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; } diff --git a/drivers/misc/tegra-profiler/eh_unwind.c b/drivers/misc/tegra-profiler/eh_unwind.c index 3f8789022466..c352309051d3 100644 --- a/drivers/misc/tegra-profiler/eh_unwind.c +++ b/drivers/misc/tegra-profiler/eh_unwind.c @@ -831,6 +831,7 @@ quadd_get_user_callchain_ut(struct pt_regs *regs, struct ex_region_info *ri; struct extables tabs; + cc->unw_method = QUADD_UNW_METHOD_EHT; cc->unw_rc = QUADD_URC_FAILURE; if (!regs || !mm) diff --git a/drivers/misc/tegra-profiler/version.h b/drivers/misc/tegra-profiler/version.h index 1ecb006c7f0f..ff6da74ee040 100644 --- a/drivers/misc/tegra-profiler/version.h +++ b/drivers/misc/tegra-profiler/version.h @@ -18,7 +18,7 @@ #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 */ |