aboutsummaryrefslogtreecommitdiff
path: root/src/target/armv4_5.c
diff options
context:
space:
mode:
authorPaul Fertser <fercerpav@gmail.com>2013-06-16 11:11:32 +0400
committerSpencer Oliver <spen@spen-soft.co.uk>2013-07-01 08:39:00 +0000
commit434afb370f92898b8803a4883f75ecb9f3f3d931 (patch)
treeb6c35434f663eb3b1e0fd3c55fd2994264f21908 /src/target/armv4_5.c
parenta6863e9a52c227086d874ef033de2499005ae318 (diff)
armv4_5: prevent segfault when gdb connects to an underinitialised target
This prevents segmentation fault that can occur on cortex_a targets if gdb connection is established before it's halted and CPSR examined. Change-Id: Id996200e0fd95440496509c1fecaabbdbf425e23 Tested-by: Henrik Nordstrom <hno@squid-cache.org> Signed-off-by: Paul Fertser <fercerpav@gmail.com> Reviewed-on: http://openocd.zylin.com/1446 Tested-by: jenkins Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Diffstat (limited to 'src/target/armv4_5.c')
-rw-r--r--src/target/armv4_5.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/target/armv4_5.c b/src/target/armv4_5.c
index 10f84d81..91830f57 100644
--- a/src/target/armv4_5.c
+++ b/src/target/armv4_5.c
@@ -429,7 +429,11 @@ struct reg *arm_reg_current(struct arm *arm, unsigned regnum)
if (regnum > 16)
return NULL;
- r = arm->core_cache->reg_list + arm->map[regnum];
+ if (!arm->map) {
+ LOG_ERROR("Register map is not available yet, the target is not fully initialised");
+ r = arm->core_cache->reg_list + regnum;
+ } else
+ r = arm->core_cache->reg_list + arm->map[regnum];
/* e.g. invalid CPSR said "secure monitor" mode on a core
* that doesn't support it...