From 10b5653da9126ffa89e8ebfabf7a6d0d57f6935b Mon Sep 17 00:00:00 2001 From: armink Date: Tue, 29 May 2018 10:57:10 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BC=98=E5=8C=96=E3=80=91=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E8=B0=83=E7=94=A8=E6=A0=88=E5=9B=9E=E6=BA=AF=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E3=80=82=E7=94=B1=E4=BA=8E=20thumb=20=E6=8C=87?= =?UTF-8?q?=E4=BB=A4=E4=B8=8B=E7=8A=B6=E6=80=81=E4=B8=8B=EF=BC=8CPC=20?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E9=83=BD=E6=98=AF=E5=A5=87=E6=95=B0=EF=BC=8C?= =?UTF-8?q?=E6=89=80=E4=BB=A5=E5=8E=BB=E9=99=A4=E5=8F=AF=E8=83=BD=E4=B8=BA?= =?UTF-8?q?=E5=81=B6=E6=95=B0=E7=9A=84=E8=84=8F=E6=95=B0=E6=8D=AE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cm_backtrace/cm_backtrace.c | 4 ++++ cm_backtrace/cmb_def.h | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/cm_backtrace/cm_backtrace.c b/cm_backtrace/cm_backtrace.c index e348c3d..4d446e8 100644 --- a/cm_backtrace/cm_backtrace.c +++ b/cm_backtrace/cm_backtrace.c @@ -374,6 +374,10 @@ size_t cm_backtrace_call_stack(uint32_t *buffer, size_t size, uint32_t sp) { for (; sp < stack_start_addr + stack_size; sp += sizeof(size_t)) { /* the *sp value may be LR, so need decrease a word to PC */ pc = *((uint32_t *) sp) - sizeof(size_t); + /* the Cortex-M using thumb instruction, so the pc must be an odd number */ + if (pc % 2 == 0) { + continue; + } if ((pc >= code_start_addr) && (pc <= code_start_addr + code_size) && (depth < CMB_CALL_STACK_MAX_DEPTH) && (depth < size)) { /* the second depth function may be already saved, so need ignore repeat */ diff --git a/cm_backtrace/cmb_def.h b/cm_backtrace/cmb_def.h index 41f0b82..0d15d65 100644 --- a/cm_backtrace/cmb_def.h +++ b/cm_backtrace/cmb_def.h @@ -34,7 +34,7 @@ #include /* library software version number */ -#define CMB_SW_VERSION "1.2.0" +#define CMB_SW_VERSION "1.2.1" #define CMB_CPU_ARM_CORTEX_M0 0 #define CMB_CPU_ARM_CORTEX_M3 1