[PATCH v6] rtems-debugger: Fixed 32bit pointers
Gedare Bloom
gedare at rtems.org
Thu May 13 14:53:16 UTC 2021
On Wed, May 12, 2021 at 1:21 PM Stephen Clark <stephen.clark at oarcorp.com> wrote:
>
> Using 32bit types like uint32_t for pointers creates issues on 64 bit
> architectures like AArch64. Replaced occurrences of these with uintptr_t,
> which will work for both 32 and 64 bit architectures. Added hex_decode_uintptr
> function to rtems-debugger.
> ---
> cpukit/include/rtems/shellconfig.h | 8 ++++++
> cpukit/libdebugger/rtems-debugger-server.c | 32 ++++++++++++++++++----
> cpukit/libdebugger/rtems-debugger-target.c | 2 +-
> cpukit/libdebugger/rtems-debugger-target.h | 2 +-
> 4 files changed, 36 insertions(+), 8 deletions(-)
>
> diff --git a/cpukit/include/rtems/shellconfig.h b/cpukit/include/rtems/shellconfig.h
> index c5fcf4a45e..07860fbbc3 100644
> --- a/cpukit/include/rtems/shellconfig.h
> +++ b/cpukit/include/rtems/shellconfig.h
> @@ -98,6 +98,7 @@ extern rtems_shell_cmd_t rtems_shell_RTRACE_Command;
> extern rtems_shell_cmd_t rtems_shell_ROUTE_Command;
> extern rtems_shell_cmd_t rtems_shell_NETSTATS_Command;
> extern rtems_shell_cmd_t rtems_shell_PING_Command;
> + extern rtems_shell_cmd_t rtems_shell_TTCP_Command;
> #endif
>
> /*
> @@ -516,6 +517,13 @@ extern rtems_shell_alias_t * const rtems_shell_Initial_aliases[];
> defined(CONFIGURE_SHELL_COMMAND_PING)
> &rtems_shell_PING_Command,
> #endif
> +
> + #if (defined(CONFIGURE_SHELL_COMMANDS_ALL_NETWORKING) && \
> + !defined(CONFIGURE_SHELL_NO_COMMAND_TTCP)) || \
> + defined(CONFIGURE_SHELL_COMMAND_TTCP)
> + &rtems_shell_TTCP_Command,
> + #endif
> +
What's this stuff?
> #endif
>
> /* Miscanellous shell commands */
> diff --git a/cpukit/libdebugger/rtems-debugger-server.c b/cpukit/libdebugger/rtems-debugger-server.c
> index 975ec23a30..c82ced2aa9 100644
> --- a/cpukit/libdebugger/rtems-debugger-server.c
> +++ b/cpukit/libdebugger/rtems-debugger-server.c
> @@ -154,6 +154,26 @@ hex_encode(int val)
> return "0123456789abcdef"[val & 0xf];
> }
>
> +static inline uintptr_t
> +hex_decode_uintptr(const uint8_t* data)
nit: I'd prefer you call it hex_decode_addr().
> +{
> + uintptr_t ui = 0;
> + size_t i;
> + if (data[0] == '-') {
> + if (data[1] == '1')
> + ui = (uintptr_t) -1;
> + }
> + else {
> + for (i = 0; i < (sizeof(ui) * 2); ++i) {
> + int v = hex_decode(data[i]);
> + if (v < 0)
> + break;
> + ui = (ui << 4) | v;
> + }
> + }
> + return ui;
> +}
> +
> static inline DB_UINT
> hex_decode_uint(const uint8_t* data)
> {
> @@ -1438,10 +1458,10 @@ remote_read_memory(uint8_t* buffer, int size)
> if (comma == NULL)
> remote_packet_out_str(r_E01);
> else {
> - DB_UINT addr;
> + uintptr_t addr;
> DB_UINT length;
> int r;
> - addr = hex_decode_uint(&buffer[1]);
> + addr = hex_decode_uintptr(&buffer[1]);
> length = hex_decode_uint((const uint8_t*) comma + 1);
> remote_packet_out_reset();
> r = rtems_debugger_target_start_memory_access();
> @@ -1468,10 +1488,10 @@ remote_write_memory(uint8_t* buffer, int size)
> comma = strchr((const char*) buffer, ',');
> colon = strchr((const char*) buffer, ':');
> if (comma != NULL && colon != NULL) {
> - DB_UINT addr;
> + uintptr_t addr;
> DB_UINT length;
> int r;
> - addr = hex_decode_uint(&buffer[1]);
> + addr = hex_decode_uintptr(&buffer[1]);
> length = hex_decode_uint((const uint8_t*) comma + 1);
> r = rtems_debugger_target_start_memory_access();
> if (r == 0) {
> @@ -1519,9 +1539,9 @@ remote_breakpoints(bool insert, uint8_t* buffer, int size)
> comma2 = strchr(comma1 + 1, ',');
> if (comma2 != NULL) {
> uint32_t capabilities;
> - DB_UINT addr;
> + uintptr_t addr;
> DB_UINT kind;
> - addr = hex_decode_uint((const uint8_t*) comma1 + 1);
> + addr = hex_decode_uintptr((const uint8_t*) comma1 + 1);
> kind = hex_decode_uint((const uint8_t*)comma2 + 1);
> capabilities = rtems_debugger_target_capabilities();
> switch (buffer[1]) {
> diff --git a/cpukit/libdebugger/rtems-debugger-target.c b/cpukit/libdebugger/rtems-debugger-target.c
> index bf7579700d..34e4e84d2f 100644
> --- a/cpukit/libdebugger/rtems-debugger-target.c
> +++ b/cpukit/libdebugger/rtems-debugger-target.c
> @@ -168,7 +168,7 @@ rtems_debugger_target_reg_table_size(void)
> }
>
> int
> -rtems_debugger_target_swbreak_control(bool insert, DB_UINT addr, DB_UINT kind)
> +rtems_debugger_target_swbreak_control(bool insert, uintptr_t addr, DB_UINT kind)
> {
> rtems_debugger_target* target = rtems_debugger->target;
> rtems_debugger_target_swbreak* swbreaks;
> diff --git a/cpukit/libdebugger/rtems-debugger-target.h b/cpukit/libdebugger/rtems-debugger-target.h
> index f2abbe5fd3..db356e1f07 100644
> --- a/cpukit/libdebugger/rtems-debugger-target.h
> +++ b/cpukit/libdebugger/rtems-debugger-target.h
> @@ -200,7 +200,7 @@ extern void rtems_debugger_target_exception_print(CPU_Exception_frame* frame);
> * Software breakpoints. These are also referred to as memory breakpoints.
> */
> extern int rtems_debugger_target_swbreak_control(bool insert,
> - DB_UINT addr,
> + uintptr_t addr,
> DB_UINT kind);
>
> /**
> --
> 2.27.0
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
More information about the devel
mailing list