]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Fix signed/unsigned address extraction in capability maintenance commands
authorLuis Machado <luis.machado@arm.com>
Sat, 22 Oct 2022 01:54:27 +0000 (02:54 +0100)
committerLuis Machado <luis.machado@arm.com>
Wed, 26 Oct 2022 08:42:50 +0000 (09:42 +0100)
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

index 07b616105243b518782583f3d42712a97df90c76..b162915d57b8b181178fbc8225df900754f26cdb 100644 (file)
@@ -1798,7 +1798,7 @@ maint_print_cap_from_addr_cmd (const char *args, int from_tty)
   if (args == nullptr)
     error (_("Missing argument <address> (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 <lower 64 bits> 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;