armv4_5: prevent segfault when gdb connects to an underinitialised target 46/1446/2
authorPaul Fertser <fercerpav@gmail.com>
Sun, 16 Jun 2013 07:11:32 +0000 (11:11 +0400)
committerSpencer Oliver <spen@spen-soft.co.uk>
Mon, 1 Jul 2013 08:39:00 +0000 (08:39 +0000)
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>
src/target/armv4_5.c

index 10f84d8..91830f5 100644 (file)
@@ -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...