uint64_t->target_addr_t for stack pointers.
authorTim Newsome <tim@sifive.com>
Tue, 21 Sep 2021 18:43:21 +0000 (11:43 -0700)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sat, 2 Oct 2021 13:17:41 +0000 (13:17 +0000)
This might be incomplete. It's just a quick attempt to reduce some of
the difference between riscv-openocd and mainline. Other stack pointers
can be updated as I come across them.

Change-Id: Id3311b8a1bb0667f309a26d36b67093bfeb8380a
Signed-off-by: Tim Newsome <tim@sifive.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/6586
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
src/rtos/rtos.c
src/rtos/rtos.h
src/rtos/rtos_riot_stackings.c
src/rtos/rtos_standard_stackings.c
src/rtos/rtos_standard_stackings.h
src/rtos/zephyr.c

index eaad5e50c9fd3432d305b32d8eb2ff0f3db1fc9c..f401c3d30bdacfe7b07b6c1d5f6324b35ff64c6c 100644 (file)
@@ -616,7 +616,7 @@ int rtos_generic_stack_read(struct target *target,
                LOG_OUTPUT("\r\n");
 #endif
 
-       int64_t new_stack_ptr;
+       target_addr_t new_stack_ptr;
        if (stacking->calculate_process_stack) {
                new_stack_ptr = stacking->calculate_process_stack(target,
                                stack_data, stacking, stack_ptr);
index 81751fe0a80ea2200478a4da7f085c82b522f237..dc7a64f43ea7bb8b2a600fc2cc7d282d68895e91 100644 (file)
@@ -108,10 +108,10 @@ struct rtos_register_stacking {
         * just use stacking->stack_registers_size * stack_growth_direction
         * to calculate adjustment.
         */
-       int64_t (*calculate_process_stack)(struct target *target,
+       target_addr_t (*calculate_process_stack)(struct target *target,
                const uint8_t *stack_data,
                const struct rtos_register_stacking *stacking,
-               int64_t stack_ptr);
+               target_addr_t stack_ptr);
        const struct stack_register_offset *register_offsets;
 };
 
index 98e02edfcbdfbc0354cd960d3a4a50eae8829f63..abf08c8ff4f889e53de633420b896655fd89a834 100644 (file)
@@ -27,9 +27,9 @@
 /* This works for the M0 and M34 stackings as xPSR is in a fixed
  * location
  */
-static int64_t rtos_riot_cortex_m_stack_align(struct target *target,
+static target_addr_t rtos_riot_cortex_m_stack_align(struct target *target,
        const uint8_t *stack_data, const struct rtos_register_stacking *stacking,
-       int64_t stack_ptr)
+       target_addr_t stack_ptr)
 {
        const int XPSR_OFFSET = 0x40;
        return rtos_cortex_m_stack_align(target, stack_data, stacking,
index 90c642a0070e95ed50e5752b4dbf256bf9696735..c3eef5c068e11ed19fdfc08316655c78f027bfb3 100644 (file)
@@ -152,29 +152,29 @@ static const struct stack_register_offset rtos_standard_nds32_n1068_stack_offset
        { 35, 0x10, 32 },               /* IFC_LP */
 };
 
-static int64_t rtos_generic_stack_align(struct target *target,
+static target_addr_t rtos_generic_stack_align(struct target *target,
        const uint8_t *stack_data, const struct rtos_register_stacking *stacking,
-       int64_t stack_ptr, int align)
+       target_addr_t stack_ptr, int align)
 {
-       int64_t new_stack_ptr;
-       int64_t aligned_stack_ptr;
+       target_addr_t new_stack_ptr;
+       target_addr_t aligned_stack_ptr;
        new_stack_ptr = stack_ptr - stacking->stack_growth_direction *
                stacking->stack_registers_size;
-       aligned_stack_ptr = new_stack_ptr & ~((int64_t)align - 1);
+       aligned_stack_ptr = new_stack_ptr & ~((target_addr_t)align - 1);
        if (aligned_stack_ptr != new_stack_ptr &&
                stacking->stack_growth_direction == -1) {
                /* If we have a downward growing stack, the simple alignment code
                 * above results in a wrong result (since it rounds down to nearest
                 * alignment).  We want to round up so add an extra align.
                 */
-               aligned_stack_ptr += (int64_t)align;
+               aligned_stack_ptr += (target_addr_t)align;
        }
        return aligned_stack_ptr;
 }
 
-int64_t rtos_generic_stack_align8(struct target *target,
+target_addr_t rtos_generic_stack_align8(struct target *target,
        const uint8_t *stack_data, const struct rtos_register_stacking *stacking,
-       int64_t stack_ptr)
+       target_addr_t stack_ptr)
 {
        return rtos_generic_stack_align(target, stack_data,
                        stacking, stack_ptr, 8);
@@ -199,13 +199,13 @@ int64_t rtos_generic_stack_align8(struct target *target,
  * This is just a helper function for use in the calculate_process_stack
  * function for a given architecture/rtos.
  */
-int64_t rtos_cortex_m_stack_align(struct target *target,
+target_addr_t rtos_cortex_m_stack_align(struct target *target,
        const uint8_t *stack_data, const struct rtos_register_stacking *stacking,
-       int64_t stack_ptr, size_t xpsr_offset)
+       target_addr_t stack_ptr, size_t xpsr_offset)
 {
        const uint32_t ALIGN_NEEDED = (1 << 9);
        uint32_t xpsr;
-       int64_t new_stack_ptr;
+       target_addr_t new_stack_ptr;
 
        new_stack_ptr = stack_ptr - stacking->stack_growth_direction *
                stacking->stack_registers_size;
@@ -220,27 +220,27 @@ int64_t rtos_cortex_m_stack_align(struct target *target,
        return new_stack_ptr;
 }
 
-static int64_t rtos_standard_cortex_m3_stack_align(struct target *target,
+static target_addr_t rtos_standard_cortex_m3_stack_align(struct target *target,
        const uint8_t *stack_data, const struct rtos_register_stacking *stacking,
-       int64_t stack_ptr)
+       target_addr_t stack_ptr)
 {
        const int XPSR_OFFSET = 0x3c;
        return rtos_cortex_m_stack_align(target, stack_data, stacking,
                stack_ptr, XPSR_OFFSET);
 }
 
-static int64_t rtos_standard_cortex_m4f_stack_align(struct target *target,
+static target_addr_t rtos_standard_cortex_m4f_stack_align(struct target *target,
        const uint8_t *stack_data, const struct rtos_register_stacking *stacking,
-       int64_t stack_ptr)
+       target_addr_t stack_ptr)
 {
        const int XPSR_OFFSET = 0x40;
        return rtos_cortex_m_stack_align(target, stack_data, stacking,
                stack_ptr, XPSR_OFFSET);
 }
 
-static int64_t rtos_standard_cortex_m4f_fpu_stack_align(struct target *target,
+static target_addr_t rtos_standard_cortex_m4f_fpu_stack_align(struct target *target,
        const uint8_t *stack_data, const struct rtos_register_stacking *stacking,
-       int64_t stack_ptr)
+       target_addr_t stack_ptr)
 {
        const int XPSR_OFFSET = 0x80;
        return rtos_cortex_m_stack_align(target, stack_data, stacking,
index ad319d2a086aaf1971c95a4da4987519a4db3a1c..d18f1797c68e54c124deb6b18bde207cd33fb04f 100644 (file)
@@ -30,11 +30,11 @@ extern const struct rtos_register_stacking rtos_standard_cortex_m4f_stacking;
 extern const struct rtos_register_stacking rtos_standard_cortex_m4f_fpu_stacking;
 extern const struct rtos_register_stacking rtos_standard_cortex_r4_stacking;
 extern const struct rtos_register_stacking rtos_standard_nds32_n1068_stacking;
-int64_t rtos_generic_stack_align8(struct target *target,
+target_addr_t rtos_generic_stack_align8(struct target *target,
        const uint8_t *stack_data, const struct rtos_register_stacking *stacking,
-       int64_t stack_ptr);
-int64_t rtos_cortex_m_stack_align(struct target *target,
+       target_addr_t stack_ptr);
+target_addr_t rtos_cortex_m_stack_align(struct target *target,
        const uint8_t *stack_data, const struct rtos_register_stacking *stacking,
-       int64_t stack_ptr, size_t xpsr_offset);
+       target_addr_t stack_ptr, size_t xpsr_offset);
 
 #endif /* OPENOCD_RTOS_RTOS_STANDARD_STACKINGS_H */
index a5967355706e90764ab68ca02129cf2486749d55..630511636babb41ee6137e2e8c1005f7213093c6 100644 (file)
@@ -189,9 +189,9 @@ enum zephyr_symbol_values {
        ZEPHYR_VAL_COUNT
 };
 
-static int64_t zephyr_cortex_m_stack_align(struct target *target,
+static target_addr_t zephyr_cortex_m_stack_align(struct target *target,
                const uint8_t *stack_data,
-               const struct rtos_register_stacking *stacking, int64_t stack_ptr)
+               const struct rtos_register_stacking *stacking, target_addr_t stack_ptr)
 {
        return rtos_cortex_m_stack_align(target, stack_data, stacking,
                        stack_ptr, ARM_XPSR_OFFSET);