Date: Sun, 21 Dec 2014 21:38:13 +0000 (UTC) From: Andrew Turner <andrew@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r276033 - head/sys/arm/arm Message-ID: <201412212138.sBLLcD9g078599@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: andrew Date: Sun Dec 21 21:38:12 2014 New Revision: 276033 URL: https://svnweb.freebsd.org/changeset/base/276033 Log: Fix the unwinder to get past functions with no stack but may cause an exception. In this case no registers will be updated but the link register will be copied to the program counter to be used to find the calling function. In this case the program counter may be updated and we should continue with the trace. Modified: head/sys/arm/arm/db_trace.c Modified: head/sys/arm/arm/db_trace.c ============================================================================== --- head/sys/arm/arm/db_trace.c Sun Dec 21 21:27:12 2014 (r276032) +++ head/sys/arm/arm/db_trace.c Sun Dec 21 21:38:12 2014 (r276033) @@ -345,9 +345,16 @@ db_unwind_tab(struct unwind_state *state /* * The program counter was not updated, load it from the link register. */ - if (state->registers[PC] == 0) + if (state->registers[PC] == 0) { state->registers[PC] = state->registers[LR]; + /* + * If the program counter changed, flag it in the update mask. + */ + if (state->start_pc != state->registers[PC]) + state->update_mask |= 1 << PC; + } + return 0; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201412212138.sBLLcD9g078599>