From: Luis Machado Date: Sat, 22 Oct 2022 01:54:27 +0000 (+0100) Subject: Fix signed/unsigned address extraction in capability maintenance commands X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=74dda148e9eac68f0dde2904485539a3497a2331;p=thirdparty%2Fbinutils-gdb.git 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. --- 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;