From 74dda148e9eac68f0dde2904485539a3497a2331 Mon Sep 17 00:00:00 2001 From: Luis Machado Date: Sat, 22 Oct 2022 02:54:27 +0100 Subject: [PATCH] Fix signed/unsigned address extraction in capability maintenance commands For some cases, I noticed the parse_and_eval_address function was sign-extending addresses, which is not desirable. This leads to incorrect addresses being passed to the target. Fix this by using parse_and_eval_long instead. --- gdb/aarch64-linux-tdep.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c index 07b61610524..b162915d57b 100644 --- a/gdb/aarch64-linux-tdep.c +++ b/gdb/aarch64-linux-tdep.c @@ -1798,7 +1798,7 @@ maint_print_cap_from_addr_cmd (const char *args, int from_tty) if (args == nullptr) error (_("Missing argument
(64-bit hex).")); - CORE_ADDR addr = parse_and_eval_address (args); + CORE_ADDR addr = parse_and_eval_long (args); cap = target_read_capability (addr); if (cap.empty ()) @@ -1859,10 +1859,10 @@ maint_set_capability_in_memory_cmd (const char *args, int from_tty) if (lower_str.empty ()) error (_("Missing argument (64-bit hex)")); - CORE_ADDR addr = parse_and_eval_address (addr_str.c_str ()); - CORE_ADDR tag_part = parse_and_eval_address (tag_str.c_str ()); - CORE_ADDR half_a = parse_and_eval_address (upper_str.c_str ()); - CORE_ADDR half_b = parse_and_eval_address (lower_str.c_str ()); + CORE_ADDR addr = parse_and_eval_long (addr_str.c_str ()); + CORE_ADDR tag_part = parse_and_eval_long (tag_str.c_str ()); + CORE_ADDR half_a = parse_and_eval_long (upper_str.c_str ()); + CORE_ADDR half_b = parse_and_eval_long (lower_str.c_str ()); unsigned __int128 a, b; -- 2.39.2