summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Nabirushkin <inabirushkin@nvidia.com>2014-03-03 11:52:22 +0400
committerRiham Haidar <rhaidar@nvidia.com>2014-03-06 12:31:22 -0800
commit00d022623c13da6b0a77ea1bfb2ee7fbee981e50 (patch)
tree6aa9cb0dad43195bf3f3c766e20acfa9e34ebc43
parentccde0304ffcf4a1cb75bad78507597edc1d69290 (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.c17
-rw-r--r--drivers/misc/tegra-profiler/eh_unwind.c1
-rw-r--r--drivers/misc/tegra-profiler/version.h2
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 */