Add stack alignment support to RTOS awareness - needed for ARM ABI processors
authorEvan Hunter <ehunter@broadcom.com>
Tue, 22 Nov 2011 06:14:56 +0000 (17:14 +1100)
committerØyvind Harboe <oyvindharboe@gmail.com>
Tue, 29 Nov 2011 13:17:22 +0000 (13:17 +0000)
Change-Id: I69a2f3d0606a97d48b7738561a85da87f458b82b
Signed-off-by: Evan Hunter <ehunter@broadcom.com>
Reviewed-on: http://openocd.zylin.com/238
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Reviewed-by: Mathias Küster <kesmtp@freenet.de>
Reviewed-by: Øyvind Harboe <oyvindharboe@gmail.com>
src/rtos/rtos.c
src/rtos/rtos.h
src/rtos/rtos_ecos_stackings.c
src/rtos/rtos_standard_stackings.c

index 3c029f5a053f89508c169abc6bd0d70bc96422c2..ac7f89c7f14ed1c28b9c8820c2ed5f4f902e4e22 100644 (file)
@@ -490,6 +490,12 @@ int rtos_generic_stack_read( struct target * target, const struct rtos_register_
        *hex_reg_list = (char*)malloc( list_size*2 +1 );
        tmp_str_ptr = *hex_reg_list;
        new_stack_ptr = stack_ptr - stacking->stack_growth_direction * stacking->stack_registers_size;
+       if (stacking->stack_alignment != 0) {
+               /* Align new stack pointer to x byte boundary */
+               new_stack_ptr =
+                       (new_stack_ptr & (~((int64_t) stacking->stack_alignment - 1))) +
+                       ((stacking->stack_growth_direction == -1) ? stacking->stack_alignment : 0);
+       }
        for( i = 0; i < stacking->num_output_registers; i++ )
        {
                int j;
index 1a73bd765f9da98f664dcf934dc65c76bf620a87..269ae8d918034349d9af54890791627af1343b6c 100644 (file)
@@ -91,6 +91,7 @@ struct rtos_register_stacking
        unsigned char                       stack_registers_size;
        signed   char                       stack_growth_direction;
        unsigned char                       num_output_registers;
+       unsigned char                       stack_alignment;
        const struct stack_register_offset* register_offsets;
 };
 
index a81b4771909f1f3ff7f1bb81064431f9d0eaa5b9..995c113894fc5cbf73d7452ae1a02f5f4741f887 100644 (file)
 
 #include "rtos.h"
 
-static const struct stack_register_offset rtos_eCos_Cortex_M3_stack_offsets [] =
-{ { 0x0c, 32 },       // r0
-  { 0x10, 32 },       // r1
-  { 0x14, 32 },       // r2
-  { 0x18, 32 },       // r3
-  { 0x1c, 32 },       // r4
-  { 0x20, 32 },       // r5
-  { 0x24, 32 },       // r6
-  { 0x28, 32 },       // r7
-  { 0x2c, 32 },       // r8
-  { 0x30, 32 },       // r9
-  { 0x34, 32 },       // r10
-  { 0x38, 32 },       // r11
-  { 0x3c, 32 },       // r12
-  { -2,   32 },       // sp
-  { -1,   32 },       // lr
-  { 0x40, 32 },       // pc
-  { -1,   96 },       // FPA1
-  { -1,   96 },       // FPA2
-  { -1,   96 },       // FPA3
-  { -1,   96 },       // FPA4
-  { -1,   96 },       // FPA5
-  { -1,   96 },       // FPA6
-  { -1,   96 },       // FPA7
-  { -1,   96 },       // FPA8
-  { -1,   32 },       // FPS
-  { -1,   32 },       // xPSR
+static const struct stack_register_offset rtos_eCos_Cortex_M3_stack_offsets[] = {
+       { 0x0c, 32 },       /* r0   */
+       { 0x10, 32 },       /* r1   */
+       { 0x14, 32 },       /* r2   */
+       { 0x18, 32 },       /* r3   */
+       { 0x1c, 32 },       /* r4   */
+       { 0x20, 32 },       /* r5   */
+       { 0x24, 32 },       /* r6   */
+       { 0x28, 32 },       /* r7   */
+       { 0x2c, 32 },       /* r8   */
+       { 0x30, 32 },       /* r9   */
+       { 0x34, 32 },       /* r10  */
+       { 0x38, 32 },       /* r11  */
+       { 0x3c, 32 },       /* r12  */
+       { -2,   32 },       /* sp   */
+       { -1,   32 },       /* lr   */
+       { 0x40, 32 },       /* pc   */
+       { -1,   96 },       /* FPA1 */
+       { -1,   96 },       /* FPA2 */
+       { -1,   96 },       /* FPA3 */
+       { -1,   96 },       /* FPA4 */
+       { -1,   96 },       /* FPA5 */
+       { -1,   96 },       /* FPA6 */
+       { -1,   96 },       /* FPA7 */
+       { -1,   96 },       /* FPA8 */
+       { -1,   32 },       /* FPS  */
+       { -1,   32 },       /* xPSR */
 };
 
 
 const struct rtos_register_stacking rtos_eCos_Cortex_M3_stacking =
 {
-          0x44,                                 // stack_registers_size
-          -1,                                   // stack_growth_direction
-          26,                                   // num_output_registers
-          rtos_eCos_Cortex_M3_stack_offsets     // register_offsets
+       0x44,                                 /* stack_registers_size */
+       -1,                                   /* stack_growth_direction */
+       26,                                   /* num_output_registers */
+       8,                                    /* stack_alignment */
+       rtos_eCos_Cortex_M3_stack_offsets     /* register_offsets */
 };
 
 
index e15b8b3ce0ba50ae0a922d4c5ccd0ac915f1391a..278d3efe5fa9f63cb249e0eb0ac656443d8a14a5 100644 (file)
 
 #include "rtos.h"
 
-static const struct stack_register_offset rtos_standard_Cortex_M3_stack_offsets [] =
-{ { 0x20, 32 },       // r0
-  { 0x24, 32 },       // r1
-  { 0x28, 32 },       // r2
-  { 0x2c, 32 },       // r3
-  { 0x00, 32 },       // r4
-  { 0x04, 32 },       // r5
-  { 0x08, 32 },       // r6
-  { 0x0c, 32 },       // r7
-  { 0x10, 32 },       // r8
-  { 0x14, 32 },       // r9
-  { 0x18, 32 },       // r10
-  { 0x1c, 32 },       // r11
-  { 0x30, 32 },       // r12
-  { -2,   32 },       // sp
-  { 0x34, 32 },       // lr
-  { 0x38, 32 },       // pc
-  { -1,   96 },       // FPA1
-  { -1,   96 },       // FPA2
-  { -1,   96 },       // FPA3
-  { -1,   96 },       // FPA4
-  { -1,   96 },       // FPA5
-  { -1,   96 },       // FPA6
-  { -1,   96 },       // FPA7
-  { -1,   96 },       // FPA8
-  { -1,   32 },       // FPS
-  { 0x3c, 32 },       // xPSR
+static const struct stack_register_offset rtos_standard_Cortex_M3_stack_offsets[] = {
+       { 0x20, 32 },       /* r0   */
+       { 0x24, 32 },       /* r1   */
+       { 0x28, 32 },       /* r2   */
+       { 0x2c, 32 },       /* r3   */
+       { 0x00, 32 },       /* r4   */
+       { 0x04, 32 },       /* r5   */
+       { 0x08, 32 },       /* r6   */
+       { 0x0c, 32 },       /* r7   */
+       { 0x10, 32 },       /* r8   */
+       { 0x14, 32 },       /* r9   */
+       { 0x18, 32 },       /* r10  */
+       { 0x1c, 32 },       /* r11  */
+       { 0x30, 32 },       /* r12  */
+       { -2,   32 },       /* sp   */
+       { 0x34, 32 },       /* lr   */
+       { 0x38, 32 },       /* pc   */
+       { -1,   96 },       /* FPA1 */
+       { -1,   96 },       /* FPA2 */
+       { -1,   96 },       /* FPA3 */
+       { -1,   96 },       /* FPA4 */
+       { -1,   96 },       /* FPA5 */
+       { -1,   96 },       /* FPA6 */
+       { -1,   96 },       /* FPA7 */
+       { -1,   96 },       /* FPA8 */
+       { -1,   32 },       /* FPS  */
+       { 0x3c, 32 },       /* xPSR */
 };
 
 
 const struct rtos_register_stacking rtos_standard_Cortex_M3_stacking =
 {
-          0x40,                                 // stack_registers_size
-          -1,                                   // stack_growth_direction
-          26,                                   // num_output_registers
-          rtos_standard_Cortex_M3_stack_offsets // register_offsets
+       0x40,                                 /* stack_registers_size */
+       -1,                                   /* stack_growth_direction */
+       26,                                   /* num_output_registers */
+       8,                                    /* stack_alignment */
+       rtos_standard_Cortex_M3_stack_offsets /* register_offsets */
 };
 
 

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)