]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[General] Accept capabilities as a type of pointer
authorLuis Machado <luis.machado@arm.com>
Thu, 10 Sep 2020 20:33:06 +0000 (17:33 -0300)
committerLuis Machado <luis.machado@linaro.org>
Tue, 20 Oct 2020 18:05:57 +0000 (15:05 -0300)
This makes GDB happy when trying to convert to/from capabilities from
long types.

gdb/ChangeLog:

2020-10-20  Luis Machado  <luis.machado@arm.com>

* findvar.c (extract_typed_address): Handle capabilities.
(store_typed_address): Likewise.
* value.c (unpack_long): Likewise.
(pack_long): Likewise.

gdb/ChangeLog
gdb/findvar.c
gdb/value.c

index fe10cf4e4d5fc15337a09dcd7f3fc2e7030a1870..5ba49ff62f6f7045e8661bec9f4af15b5e737c8d 100644 (file)
@@ -1,3 +1,10 @@
+2020-10-20  Luis Machado  <luis.machado@arm.com>
+
+       * findvar.c (extract_typed_address): Handle capabilities.
+       (store_typed_address): Likewise.
+       * value.c (unpack_long): Likewise.
+       (pack_long): Likewise.
+
 2020-10-20  Luis Machado  <luis.machado@arm.com>
 
        * valops.c (value_cast): Cast from capability to scalar types.
index 78d727b07bb539e8cb5de6b85fe28d28d48a6ec6..5c3a8848a5b749f3b37b210d40bfd64f152a5fe5 100644 (file)
@@ -153,7 +153,8 @@ extract_long_unsigned_integer (const gdb_byte *addr, int orig_len,
 CORE_ADDR
 extract_typed_address (const gdb_byte *buf, struct type *type)
 {
-  if (type->code () != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type))
+  if (type->code () != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type)
+      && type->code () != TYPE_CODE_CAPABILITY)
     internal_error (__FILE__, __LINE__,
                    _("extract_typed_address: "
                    "type is not a pointer or reference"));
@@ -206,7 +207,8 @@ template void store_integer (gdb_byte *addr, int len,
 void
 store_typed_address (gdb_byte *buf, struct type *type, CORE_ADDR addr)
 {
-  if (type->code () != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type))
+  if (type->code () != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type)
+      && type->code () != TYPE_CODE_CAPABILITY)
     internal_error (__FILE__, __LINE__,
                    _("store_typed_address: "
                    "type is not a pointer or reference"));
index 7c36c31dccd7b61da4a9b5e658de3218b1ccd148..ef2ebf09ef5d23c584da8329c02a4c953accd3e0 100644 (file)
@@ -2809,6 +2809,7 @@ unpack_long (struct type *type, const gdb_byte *valaddr)
     case TYPE_CODE_PTR:
     case TYPE_CODE_REF:
     case TYPE_CODE_RVALUE_REF:
+    case TYPE_CODE_CAPABILITY:
       /* Assume a CORE_ADDR can fit in a LONGEST (for now).  Not sure
          whether we want this to be true eventually.  */
       return extract_typed_address (valaddr, type);
@@ -3369,6 +3370,7 @@ pack_long (gdb_byte *buf, struct type *type, LONGEST num)
     case TYPE_CODE_REF:
     case TYPE_CODE_RVALUE_REF:
     case TYPE_CODE_PTR:
+    case TYPE_CODE_CAPABILITY:
       store_typed_address (buf, type, (CORE_ADDR) num);
       break;