]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[Morello] Add new DWARF defines for capabilities
authorLuis Machado <luis.machado@arm.com>
Thu, 5 Mar 2020 20:13:25 +0000 (17:13 -0300)
committerJohn Baldwin <jhb@FreeBSD.org>
Thu, 1 Sep 2022 22:53:22 +0000 (15:53 -0700)
This patch adds some new definitions required for Morello.

* DWARF base types: DW_ATE_CHERI_signed_intcap and DW_ATE_CHERI_unsigned_intcap.

* DWARF address class: DW_ADDR_capability

* DWARF register numbering

It also adds support for handling DW_ATE_CHERI_signed_intcap and
DW_ATE_CHERI_unsigned_intcap on binutils and GDB.

binutils/ChangeLog

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

* dwarf.c (get_type_signedness): Handles capabilities.
(read_and_display_attr_value): Likewise.

gdb/ChangeLog:

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

* aarch64-tdep.h (AARCH64_DWARF_C0, AARCH64_DWARF_CSP)
(AARCH64_DWARF_PCC, AARCH64_DWARF_DDC)
(AARCH64_DWARF_RESERVED_1, AARCH64_DWARF_RESERVED_2)
(C_REGISTER_SIZE): New defines.
* dwarf2/read.c (read_base_type): Handle capabilities.

include/ChangeLog

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

* dwarf2.def (DW_ATE_CHERI_signed_intcap)
(DW_ATE_CHERI_unsigned_intcap): New defines.
* dwarf2.h (DW_ADDR_capability): New define.

binutils/ChangeLog
binutils/dwarf.c
gdb/aarch64-tdep.h
gdb/dwarf2/read.c
include/ChangeLog
include/dwarf2.def
include/dwarf2.h

index 235d09878a0b50b3fb65ebc59d438870285348d0..0eff37d1c758b6091c05ac9e69e4ef1fd7baec2f 100644 (file)
@@ -1,3 +1,8 @@
+2020-10-20  Luis Machado  <luis.machado@arm.com>
+
+       * dwarf.c (get_type_signedness): Handles capabilities.
+       (read_and_display_attr_value): Likewise.
+
 2020-10-20  Siddhesh Poyarekar  <siddesh.poyarekar@arm.com>
 
        * dwarf.c (dwarf_regnames_aarch64): Add capability registers.
index 9bfe48f93add7180d4aba4e65b5756cc21a8041d..aac4fb8e6d8da68d9f228737a4523de3c68bd6e3 100644 (file)
@@ -2255,6 +2255,7 @@ get_type_signedness (abbrev_entry *entry,
            case DW_ATE_unsigned:
            case DW_ATE_unsigned_char:
            case DW_ATE_unsigned_fixed:
+           case DW_ATE_CHERI_unsigned_intcap:
              * is_signed = false;
              break;
 
@@ -2266,6 +2267,7 @@ get_type_signedness (abbrev_entry *entry,
            case DW_ATE_imaginary_float:
            case DW_ATE_decimal_float:
            case DW_ATE_signed_fixed:
+           case DW_ATE_CHERI_signed_intcap:
              * is_signed = true;
              break;
            }
@@ -3097,6 +3099,13 @@ read_and_display_attr_value (unsigned long           attribute,
        case DW_ATE_HP_imaginary_float80:       printf ("(HP_imaginary_float80)"); break;
        case DW_ATE_HP_imaginary_float128:      printf ("(HP_imaginary_float128)"); break;
 
+       case DW_ATE_CHERI_signed_intcap:
+         printf ("(CHERI intcap_t)");
+         break;
+       case DW_ATE_CHERI_unsigned_intcap:
+         printf ("(CHERI uintcap_t)");
+         break;
+
        default:
          if (uvalue >= DW_ATE_lo_user
              && uvalue <= DW_ATE_hi_user)
index 3b9f67d6344f8b56ab9eb320bdfebe5d3f76d0a8..97146054d91206eb70c2dbb63b24c58012d1cf78 100644 (file)
@@ -42,6 +42,12 @@ struct regset;
 #define AARCH64_DWARF_SVE_FFR  47
 #define AARCH64_DWARF_SVE_P0   48
 #define AARCH64_DWARF_SVE_Z0   96
+#define AARCH64_DWARF_C0  198
+#define AARCH64_DWARF_CSP 229
+#define AARCH64_DWARF_PCC 230
+#define AARCH64_DWARF_DDC 231
+#define AARCH64_DWARF_RESERVED_1  232
+#define AARCH64_DWARF_RESERVED_2  233
 
 /* Size of integer registers.  */
 #define X_REGISTER_SIZE  8
@@ -50,6 +56,7 @@ struct regset;
 #define S_REGISTER_SIZE  4
 #define D_REGISTER_SIZE  8
 #define Q_REGISTER_SIZE 16
+#define C_REGISTER_SIZE 16
 
 /* Total number of general (X) registers.  */
 #define AARCH64_X_REGISTER_COUNT 32
index 10550336063f51545063885281dd587a8e1774f0..139fee4685e26c9605314825006f3798ccb34893 100644 (file)
@@ -18284,6 +18284,15 @@ read_base_type (struct die_info *die, struct dwarf2_cu *cu)
        finish_fixed_point_type (type, gnat_encoding_suffix, die, cu);
        break;
 
+      case DW_ATE_CHERI_signed_intcap:
+      case DW_ATE_CHERI_unsigned_intcap:
+       {
+         /* Turn DW_ATE_CHERI_*_intcap into a void * pointer.  */
+         type = init_type (objfile, TYPE_CODE_VOID, TARGET_CHAR_BIT, NULL);
+         type = init_pointer_type (objfile, bits, name, type);
+         break;
+       }
+
       default:
        complaint (_("unsupported DW_AT_encoding: '%s'"),
                   dwarf_type_encoding_name (encoding));
index 67f10a9f29010a542ba50b368ff6ca77e6b6091d..9b58eefcfbfa8b965d95283d74810c741a6c79d3 100644 (file)
@@ -1,3 +1,9 @@
+2020-10-20  Luis Machado  <luis.machado@arm.com>
+
+       * dwarf2.def (DW_ATE_CHERI_signed_intcap)
+       (DW_ATE_CHERI_unsigned_intcap): New defines.
+       * dwarf2.h (DW_ADDR_capability): New define.
+
 2020-10-20  Siddhesh Poyarekar  <siddesh.poyarekar@arm.com>
 
        * elf/aarch64.h: New Morello TLSDESC relocations.
index 530c6f849f984acc2d619c5dbe6447e1734895d7..e379897eceda88db07a55d50c088f555e228605e 100644 (file)
@@ -750,6 +750,11 @@ DW_ATE (DW_ATE_HP_unsigned_fixed, 0x8e) /* Cobol.  */
 DW_ATE (DW_ATE_HP_VAX_complex_float, 0x8f) /* F or G floating complex.  */
 DW_ATE (DW_ATE_HP_VAX_complex_float_d, 0x90) /* D floating complex.  */
 
+/* Describes a signed integer/capability type __intcap_t.  */
+DW_ATE (DW_ATE_CHERI_signed_intcap, 0xa0)
+/* Describes an unsigned integer/capability type __uintcap_t.  */
+DW_ATE (DW_ATE_CHERI_unsigned_intcap, 0xa1)
+
 DW_END_ATE
 
 DW_FIRST_CFA (DW_CFA_advance_loc, 0x40)
index 40aa5a54f011bb04b55a615ac076262e1c88a480..85ece242c5dc81f9b29a48293d9816ed9a652e97 100644 (file)
@@ -331,6 +331,9 @@ enum dwarf_location_list_entry_type
 
 #define DW_ADDR_none           0
 
+/* The type is an address capability and can be dereferenced as such.  */
+#define DW_ADDR_capability  0x1
+
 /* Source language names and codes.  */
 enum dwarf_source_language
   {