gdb: have value_as_address call unpack_pointer
authorAndrew Burgess <aburgess@redhat.com>
Fri, 10 Mar 2023 10:49:05 +0000 (10:49 +0000)
committerAndrew Burgess <aburgess@redhat.com>
Thu, 30 Mar 2023 09:25:46 +0000 (10:25 +0100)
While refactoring some other code in gdb/python/* I wanted to merge
two code paths.  One path calls value_as_address, while the other
calls unpack_pointer.

I suspect calling value_as_address is the correct choice, but, while
examining the code I noticed that value_as_address calls unpack_long
rather than unpack_pointer.

Under the hood, unpack_pointer does just call unpack_long so there's
no real difference here, but it feels like value_as_address should
call unpack_pointer.

I've updated the code to use unpack_pointer, and changed a related
comment to say that we call unpack_pointer.  I've also adjusted the
header comment on value_as_address.  The existing header refers to
some code that is now commented out.

Rather than trying to describe the whole algorithm of
value_as_address, which is already well commented within the function,
I've just trimmed the comment on value_as_address to be a brief
summary of what the function does.

There should be no user visible changes after this commit.

Reviewed-By: Tom Tromey <tom@tromey.com>
gdb/value.c

index 757f92572aaad12e5f40c24384857cb30be0172c..eab1933b2568d08db8b1dad36db6b42885bb5a75 100644 (file)
@@ -2621,9 +2621,8 @@ value_as_mpz (struct value *val)
   return result;
 }
 
-/* Extract a value as a C pointer.  Does not deallocate the value.
-   Note that val's type may not actually be a pointer; value_as_long
-   handles all the cases.  */
+/* Extract a value as a C pointer.  */
+
 CORE_ADDR
 value_as_address (struct value *val)
 {
@@ -2662,7 +2661,7 @@ value_as_address (struct value *val)
      to COERCE_ARRAY below actually does all the usual unary
      conversions, which includes converting values of type `function'
      to `pointer to function'.  This is the challenging conversion
-     discussed above.  Then, `unpack_long' will convert that pointer
+     discussed above.  Then, `unpack_pointer' will convert that pointer
      back into an address.
 
      So, suppose the user types `disassemble foo' on an architecture
@@ -2723,7 +2722,7 @@ value_as_address (struct value *val)
     return gdbarch_integer_to_address (gdbarch, val->type (),
                                       val->contents ().data ());
 
-  return unpack_long (val->type (), val->contents ().data ());
+  return unpack_pointer (val->type (), val->contents ().data ());
 #endif
 }
 \f