diff --git a/gdb/arch/ppc-linux-common.h b/gdb/arch/ppc-linux-common.h
index 71e2d5d173..9ecb02bcf6 100644
--- a/gdb/arch/ppc-linux-common.h
+++ b/gdb/arch/ppc-linux-common.h
@@ -33,6 +33,8 @@ struct target_desc;
#define PPC_LINUX_SIZEOF_PPRREGSET 8
#define PPC_LINUX_SIZEOF_DSCRREGSET 8
#define PPC_LINUX_SIZEOF_TARREGSET 8
+#define PPC_LINUX_SIZEOF_EBBREGSET (3*8)
+#define PPC_LINUX_SIZEOF_PMUREGSET (5*8)
#define PPC_LINUX_SIZEOF_TM_SPRREGSET (3*8)
#define PPC32_LINUX_SIZEOF_CGPRREGSET (48*4)
#define PPC64_LINUX_SIZEOF_CGPRREGSET (48*8)
diff --git a/gdb/features/rs6000/power-ebb.xml b/gdb/features/rs6000/power-ebb.xml
new file mode 100644
index 0000000000..7bec21f916
--- /dev/null
+++ b/gdb/features/rs6000/power-ebb.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/gdb/features/rs6000/power-pmu.xml b/gdb/features/rs6000/power-pmu.xml
new file mode 100644
index 0000000000..8f20c5df07
--- /dev/null
+++ b/gdb/features/rs6000/power-pmu.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.c b/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.c
index 99c6a7feb7..4c3b977d82 100644
--- a/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.c
+++ b/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.c
@@ -199,6 +199,18 @@ initialize_tdesc_powerpc_isa207_htm_vsx32l (void)
feature = tdesc_create_feature (result, "org.gnu.gdb.power.tar");
tdesc_create_reg (feature, "tar", 141, 1, NULL, 64, "uint64");
+ feature = tdesc_create_feature (result, "org.gnu.gdb.power.ebb");
+ tdesc_create_reg (feature, "bescr", 142, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "ebbhr", 143, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "ebbrr", 144, 0, NULL, 64, "uint64");
+
+ feature = tdesc_create_feature (result, "org.gnu.gdb.power.pmu");
+ tdesc_create_reg (feature, "mmcr0", 145, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "mmcr2", 146, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "siar", 147, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "sdar", 148, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "sier", 149, 0, NULL, 64, "uint64");
+
feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm");
element_type = tdesc_named_type (feature, "ieee_single");
tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -224,147 +236,147 @@ initialize_tdesc_powerpc_isa207_htm_vsx32l (void)
field_type = tdesc_named_type (feature, "v16i8");
tdesc_add_field (type_with_fields, "v16_int8", field_type);
- tdesc_create_reg (feature, "tfhar", 142, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "texasr", 143, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "tfiar", 144, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr0", 145, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr1", 146, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr2", 147, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr3", 148, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr4", 149, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr5", 150, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr6", 151, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr7", 152, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr8", 153, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr9", 154, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr10", 155, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr11", 156, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr12", 157, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr13", 158, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr14", 159, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr15", 160, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr16", 161, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr17", 162, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr18", 163, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr19", 164, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr20", 165, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr21", 166, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr22", 167, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr23", 168, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr24", 169, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr25", 170, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr26", 171, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr27", 172, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr28", 173, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr29", 174, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr30", 175, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cr31", 176, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "ccr", 177, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cxer", 178, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "clr", 179, 0, NULL, 32, "code_ptr");
- tdesc_create_reg (feature, "cctr", 180, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cf0", 181, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf1", 182, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf2", 183, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf3", 184, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf4", 185, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf5", 186, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf6", 187, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf7", 188, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf8", 189, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf9", 190, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf10", 191, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf11", 192, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf12", 193, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf13", 194, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf14", 195, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf15", 196, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf16", 197, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf17", 198, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf18", 199, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf19", 200, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf20", 201, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf21", 202, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf22", 203, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf23", 204, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf24", 205, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf25", 206, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf26", 207, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf27", 208, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf28", 209, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf29", 210, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf30", 211, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf31", 212, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cfpscr", 213, 0, "float", 64, "uint64");
- tdesc_create_reg (feature, "cvr0", 214, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr1", 215, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr2", 216, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr3", 217, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr4", 218, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr5", 219, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr6", 220, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr7", 221, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr8", 222, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr9", 223, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr10", 224, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr11", 225, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr12", 226, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr13", 227, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr14", 228, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr15", 229, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr16", 230, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr17", 231, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr18", 232, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr19", 233, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr20", 234, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr21", 235, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr22", 236, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr23", 237, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr24", 238, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr25", 239, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr26", 240, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr27", 241, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr28", 242, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr29", 243, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr30", 244, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr31", 245, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvscr", 246, 0, NULL, 32, "int");
- tdesc_create_reg (feature, "cvrsave", 247, 0, NULL, 32, "int");
- tdesc_create_reg (feature, "cvs0h", 248, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs1h", 249, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs2h", 250, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs3h", 251, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs4h", 252, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs5h", 253, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs6h", 254, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs7h", 255, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs8h", 256, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs9h", 257, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs10h", 258, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs11h", 259, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs12h", 260, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs13h", 261, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs14h", 262, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs15h", 263, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs16h", 264, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs17h", 265, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs18h", 266, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs19h", 267, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs20h", 268, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs21h", 269, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs22h", 270, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs23h", 271, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs24h", 272, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs25h", 273, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs26h", 274, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs27h", 275, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs28h", 276, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs29h", 277, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs30h", 278, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs31h", 279, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cppr", 280, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cdscr", 281, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "ctar", 282, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "tfhar", 150, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "texasr", 151, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "tfiar", 152, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr0", 153, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr1", 154, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr2", 155, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr3", 156, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr4", 157, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr5", 158, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr6", 159, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr7", 160, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr8", 161, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr9", 162, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr10", 163, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr11", 164, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr12", 165, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr13", 166, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr14", 167, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr15", 168, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr16", 169, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr17", 170, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr18", 171, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr19", 172, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr20", 173, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr21", 174, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr22", 175, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr23", 176, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr24", 177, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr25", 178, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr26", 179, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr27", 180, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr28", 181, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr29", 182, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr30", 183, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cr31", 184, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "ccr", 185, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cxer", 186, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "clr", 187, 0, NULL, 32, "code_ptr");
+ tdesc_create_reg (feature, "cctr", 188, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cf0", 189, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf1", 190, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf2", 191, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf3", 192, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf4", 193, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf5", 194, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf6", 195, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf7", 196, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf8", 197, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf9", 198, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf10", 199, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf11", 200, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf12", 201, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf13", 202, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf14", 203, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf15", 204, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf16", 205, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf17", 206, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf18", 207, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf19", 208, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf20", 209, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf21", 210, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf22", 211, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf23", 212, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf24", 213, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf25", 214, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf26", 215, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf27", 216, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf28", 217, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf29", 218, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf30", 219, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf31", 220, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cfpscr", 221, 0, "float", 64, "uint64");
+ tdesc_create_reg (feature, "cvr0", 222, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr1", 223, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr2", 224, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr3", 225, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr4", 226, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr5", 227, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr6", 228, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr7", 229, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr8", 230, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr9", 231, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr10", 232, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr11", 233, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr12", 234, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr13", 235, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr14", 236, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr15", 237, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr16", 238, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr17", 239, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr18", 240, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr19", 241, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr20", 242, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr21", 243, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr22", 244, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr23", 245, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr24", 246, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr25", 247, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr26", 248, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr27", 249, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr28", 250, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr29", 251, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr30", 252, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr31", 253, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvscr", 254, 0, NULL, 32, "int");
+ tdesc_create_reg (feature, "cvrsave", 255, 0, NULL, 32, "int");
+ tdesc_create_reg (feature, "cvs0h", 256, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs1h", 257, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs2h", 258, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs3h", 259, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs4h", 260, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs5h", 261, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs6h", 262, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs7h", 263, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs8h", 264, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs9h", 265, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs10h", 266, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs11h", 267, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs12h", 268, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs13h", 269, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs14h", 270, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs15h", 271, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs16h", 272, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs17h", 273, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs18h", 274, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs19h", 275, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs20h", 276, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs21h", 277, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs22h", 278, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs23h", 279, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs24h", 280, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs25h", 281, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs26h", 282, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs27h", 283, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs28h", 284, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs29h", 285, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs30h", 286, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs31h", 287, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cppr", 288, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cdscr", 289, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "ctar", 290, 0, NULL, 64, "uint64");
tdesc_powerpc_isa207_htm_vsx32l = result;
}
diff --git a/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.xml b/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.xml
index 84192b0c38..778372d305 100644
--- a/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.xml
+++ b/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.xml
@@ -16,5 +16,7 @@
+
+
diff --git a/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.c b/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.c
index 2647a077dd..ef0cdece20 100644
--- a/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.c
+++ b/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.c
@@ -199,6 +199,18 @@ initialize_tdesc_powerpc_isa207_htm_vsx64l (void)
feature = tdesc_create_feature (result, "org.gnu.gdb.power.tar");
tdesc_create_reg (feature, "tar", 141, 1, NULL, 64, "uint64");
+ feature = tdesc_create_feature (result, "org.gnu.gdb.power.ebb");
+ tdesc_create_reg (feature, "bescr", 142, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "ebbhr", 143, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "ebbrr", 144, 0, NULL, 64, "uint64");
+
+ feature = tdesc_create_feature (result, "org.gnu.gdb.power.pmu");
+ tdesc_create_reg (feature, "mmcr0", 145, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "mmcr2", 146, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "siar", 147, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "sdar", 148, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "sier", 149, 0, NULL, 64, "uint64");
+
feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm");
element_type = tdesc_named_type (feature, "ieee_single");
tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -224,147 +236,147 @@ initialize_tdesc_powerpc_isa207_htm_vsx64l (void)
field_type = tdesc_named_type (feature, "v16i8");
tdesc_add_field (type_with_fields, "v16_int8", field_type);
- tdesc_create_reg (feature, "tfhar", 142, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "texasr", 143, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "tfiar", 144, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr0", 145, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr1", 146, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr2", 147, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr3", 148, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr4", 149, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr5", 150, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr6", 151, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr7", 152, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr8", 153, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr9", 154, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr10", 155, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr11", 156, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr12", 157, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr13", 158, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr14", 159, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr15", 160, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr16", 161, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr17", 162, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr18", 163, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr19", 164, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr20", 165, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr21", 166, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr22", 167, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr23", 168, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr24", 169, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr25", 170, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr26", 171, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr27", 172, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr28", 173, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr29", 174, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr30", 175, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cr31", 176, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "ccr", 177, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "cxer", 178, 0, NULL, 32, "uint32");
- tdesc_create_reg (feature, "clr", 179, 0, NULL, 64, "code_ptr");
- tdesc_create_reg (feature, "cctr", 180, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cf0", 181, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf1", 182, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf2", 183, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf3", 184, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf4", 185, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf5", 186, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf6", 187, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf7", 188, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf8", 189, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf9", 190, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf10", 191, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf11", 192, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf12", 193, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf13", 194, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf14", 195, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf15", 196, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf16", 197, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf17", 198, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf18", 199, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf19", 200, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf20", 201, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf21", 202, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf22", 203, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf23", 204, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf24", 205, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf25", 206, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf26", 207, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf27", 208, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf28", 209, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf29", 210, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf30", 211, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cf31", 212, 0, NULL, 64, "ieee_double");
- tdesc_create_reg (feature, "cfpscr", 213, 0, "float", 64, "uint64");
- tdesc_create_reg (feature, "cvr0", 214, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr1", 215, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr2", 216, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr3", 217, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr4", 218, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr5", 219, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr6", 220, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr7", 221, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr8", 222, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr9", 223, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr10", 224, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr11", 225, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr12", 226, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr13", 227, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr14", 228, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr15", 229, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr16", 230, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr17", 231, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr18", 232, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr19", 233, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr20", 234, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr21", 235, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr22", 236, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr23", 237, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr24", 238, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr25", 239, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr26", 240, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr27", 241, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr28", 242, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr29", 243, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr30", 244, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvr31", 245, 0, NULL, 128, "vec128");
- tdesc_create_reg (feature, "cvscr", 246, 0, NULL, 32, "int");
- tdesc_create_reg (feature, "cvrsave", 247, 0, NULL, 32, "int");
- tdesc_create_reg (feature, "cvs0h", 248, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs1h", 249, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs2h", 250, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs3h", 251, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs4h", 252, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs5h", 253, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs6h", 254, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs7h", 255, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs8h", 256, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs9h", 257, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs10h", 258, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs11h", 259, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs12h", 260, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs13h", 261, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs14h", 262, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs15h", 263, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs16h", 264, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs17h", 265, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs18h", 266, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs19h", 267, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs20h", 268, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs21h", 269, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs22h", 270, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs23h", 271, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs24h", 272, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs25h", 273, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs26h", 274, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs27h", 275, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs28h", 276, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs29h", 277, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs30h", 278, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cvs31h", 279, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cppr", 280, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "cdscr", 281, 0, NULL, 64, "uint64");
- tdesc_create_reg (feature, "ctar", 282, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "tfhar", 150, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "texasr", 151, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "tfiar", 152, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr0", 153, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr1", 154, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr2", 155, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr3", 156, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr4", 157, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr5", 158, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr6", 159, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr7", 160, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr8", 161, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr9", 162, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr10", 163, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr11", 164, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr12", 165, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr13", 166, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr14", 167, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr15", 168, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr16", 169, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr17", 170, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr18", 171, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr19", 172, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr20", 173, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr21", 174, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr22", 175, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr23", 176, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr24", 177, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr25", 178, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr26", 179, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr27", 180, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr28", 181, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr29", 182, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr30", 183, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cr31", 184, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "ccr", 185, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "cxer", 186, 0, NULL, 32, "uint32");
+ tdesc_create_reg (feature, "clr", 187, 0, NULL, 64, "code_ptr");
+ tdesc_create_reg (feature, "cctr", 188, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cf0", 189, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf1", 190, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf2", 191, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf3", 192, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf4", 193, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf5", 194, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf6", 195, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf7", 196, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf8", 197, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf9", 198, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf10", 199, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf11", 200, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf12", 201, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf13", 202, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf14", 203, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf15", 204, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf16", 205, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf17", 206, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf18", 207, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf19", 208, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf20", 209, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf21", 210, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf22", 211, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf23", 212, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf24", 213, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf25", 214, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf26", 215, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf27", 216, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf28", 217, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf29", 218, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf30", 219, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cf31", 220, 0, NULL, 64, "ieee_double");
+ tdesc_create_reg (feature, "cfpscr", 221, 0, "float", 64, "uint64");
+ tdesc_create_reg (feature, "cvr0", 222, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr1", 223, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr2", 224, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr3", 225, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr4", 226, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr5", 227, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr6", 228, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr7", 229, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr8", 230, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr9", 231, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr10", 232, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr11", 233, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr12", 234, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr13", 235, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr14", 236, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr15", 237, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr16", 238, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr17", 239, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr18", 240, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr19", 241, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr20", 242, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr21", 243, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr22", 244, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr23", 245, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr24", 246, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr25", 247, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr26", 248, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr27", 249, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr28", 250, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr29", 251, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr30", 252, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvr31", 253, 0, NULL, 128, "vec128");
+ tdesc_create_reg (feature, "cvscr", 254, 0, NULL, 32, "int");
+ tdesc_create_reg (feature, "cvrsave", 255, 0, NULL, 32, "int");
+ tdesc_create_reg (feature, "cvs0h", 256, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs1h", 257, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs2h", 258, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs3h", 259, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs4h", 260, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs5h", 261, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs6h", 262, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs7h", 263, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs8h", 264, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs9h", 265, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs10h", 266, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs11h", 267, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs12h", 268, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs13h", 269, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs14h", 270, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs15h", 271, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs16h", 272, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs17h", 273, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs18h", 274, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs19h", 275, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs20h", 276, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs21h", 277, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs22h", 278, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs23h", 279, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs24h", 280, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs25h", 281, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs26h", 282, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs27h", 283, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs28h", 284, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs29h", 285, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs30h", 286, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cvs31h", 287, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cppr", 288, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "cdscr", 289, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "ctar", 290, 0, NULL, 64, "uint64");
tdesc_powerpc_isa207_htm_vsx64l = result;
}
diff --git a/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.xml b/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.xml
index e1649d0d9e..2ee2675abd 100644
--- a/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.xml
+++ b/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.xml
@@ -16,5 +16,7 @@
+
+
diff --git a/gdb/features/rs6000/powerpc-isa207-vsx32l.c b/gdb/features/rs6000/powerpc-isa207-vsx32l.c
index 73c7a01077..e9853829e6 100644
--- a/gdb/features/rs6000/powerpc-isa207-vsx32l.c
+++ b/gdb/features/rs6000/powerpc-isa207-vsx32l.c
@@ -199,5 +199,17 @@ initialize_tdesc_powerpc_isa207_vsx32l (void)
feature = tdesc_create_feature (result, "org.gnu.gdb.power.tar");
tdesc_create_reg (feature, "tar", 141, 1, NULL, 64, "uint64");
+ feature = tdesc_create_feature (result, "org.gnu.gdb.power.ebb");
+ tdesc_create_reg (feature, "bescr", 142, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "ebbhr", 143, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "ebbrr", 144, 0, NULL, 64, "uint64");
+
+ feature = tdesc_create_feature (result, "org.gnu.gdb.power.pmu");
+ tdesc_create_reg (feature, "mmcr0", 145, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "mmcr2", 146, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "siar", 147, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "sdar", 148, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "sier", 149, 0, NULL, 64, "uint64");
+
tdesc_powerpc_isa207_vsx32l = result;
}
diff --git a/gdb/features/rs6000/powerpc-isa207-vsx32l.xml b/gdb/features/rs6000/powerpc-isa207-vsx32l.xml
index 599e6a24a2..a3a2454929 100644
--- a/gdb/features/rs6000/powerpc-isa207-vsx32l.xml
+++ b/gdb/features/rs6000/powerpc-isa207-vsx32l.xml
@@ -16,4 +16,6 @@
+
+
diff --git a/gdb/features/rs6000/powerpc-isa207-vsx64l.c b/gdb/features/rs6000/powerpc-isa207-vsx64l.c
index 9c735522d2..0e94d9c243 100644
--- a/gdb/features/rs6000/powerpc-isa207-vsx64l.c
+++ b/gdb/features/rs6000/powerpc-isa207-vsx64l.c
@@ -199,5 +199,17 @@ initialize_tdesc_powerpc_isa207_vsx64l (void)
feature = tdesc_create_feature (result, "org.gnu.gdb.power.tar");
tdesc_create_reg (feature, "tar", 141, 1, NULL, 64, "uint64");
+ feature = tdesc_create_feature (result, "org.gnu.gdb.power.ebb");
+ tdesc_create_reg (feature, "bescr", 142, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "ebbhr", 143, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "ebbrr", 144, 0, NULL, 64, "uint64");
+
+ feature = tdesc_create_feature (result, "org.gnu.gdb.power.pmu");
+ tdesc_create_reg (feature, "mmcr0", 145, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "mmcr2", 146, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "siar", 147, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "sdar", 148, 0, NULL, 64, "uint64");
+ tdesc_create_reg (feature, "sier", 149, 0, NULL, 64, "uint64");
+
tdesc_powerpc_isa207_vsx64l = result;
}
diff --git a/gdb/features/rs6000/powerpc-isa207-vsx64l.xml b/gdb/features/rs6000/powerpc-isa207-vsx64l.xml
index 42a23cc001..d91ce5e9cf 100644
--- a/gdb/features/rs6000/powerpc-isa207-vsx64l.xml
+++ b/gdb/features/rs6000/powerpc-isa207-vsx64l.xml
@@ -16,4 +16,6 @@
+
+
diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
index 6559ab1643..570fc0762f 100644
--- a/gdb/gdbserver/configure.srv
+++ b/gdb/gdbserver/configure.srv
@@ -252,6 +252,8 @@ case "${target}" in
srv_xmlfiles="${srv_xmlfiles} rs6000/power-dscr.xml"
srv_xmlfiles="${srv_xmlfiles} rs6000/power-ppr.xml"
srv_xmlfiles="${srv_xmlfiles} rs6000/power-tar.xml"
+ srv_xmlfiles="${srv_xmlfiles} rs6000/power-ebb.xml"
+ srv_xmlfiles="${srv_xmlfiles} rs6000/power-pmu.xml"
srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm.xml"
srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-e500l.xml"
srv_xmlfiles="${srv_xmlfiles} rs6000/power-spe.xml"
diff --git a/gdb/nat/ppc-linux.h b/gdb/nat/ppc-linux.h
index 44b76e2891..65c60cb158 100644
--- a/gdb/nat/ppc-linux.h
+++ b/gdb/nat/ppc-linux.h
@@ -60,6 +60,9 @@
#ifndef PPC_FEATURE2_TAR
#define PPC_FEATURE2_TAR 0x04000000
#endif
+#ifndef PPC_FEATURE2_EBB
+#define PPC_FEATURE2_EBB 0x10000000
+#endif
#ifndef PPC_FEATURE2_HTM
#define PPC_FEATURE2_HTM 0x40000000
#endif
@@ -109,6 +112,16 @@
#define NT_PPC_DSCR 0x105
#endif
+/* Event Based Branch Registers. */
+#ifndef NT_PPC_EBB
+#define NT_PPC_EBB 0x106
+#endif
+
+/* Performance Monitor Registers. */
+#ifndef NT_PPC_PMU
+#define NT_PPC_PMU 0x107
+#endif
+
/* TM checkpointed GPR Registers. */
#ifndef NT_PPC_TM_CGPR
#define NT_PPC_TM_CGPR 0x108
diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c
index b084934b22..32ace7219d 100644
--- a/gdb/ppc-linux-nat.c
+++ b/gdb/ppc-linux-nat.c
@@ -667,6 +667,24 @@ fetch_register (struct regcache *regcache, int tid, int regno)
&ppc32_linux_tarregset);
return;
}
+ else if (PPC_IS_EBB_REGNUM (regno))
+ {
+ gdb_assert (tdep->have_ebb);
+
+ fetch_regset (regcache, tid, NT_PPC_EBB,
+ PPC_LINUX_SIZEOF_EBBREGSET,
+ &ppc32_linux_ebbregset);
+ return;
+ }
+ else if (PPC_IS_PMU_REGNUM (regno))
+ {
+ gdb_assert (tdep->ppc_mmcr0_regnum != -1);
+
+ fetch_regset (regcache, tid, NT_PPC_PMU,
+ PPC_LINUX_SIZEOF_PMUREGSET,
+ &ppc32_linux_pmuregset);
+ return;
+ }
else if (PPC_IS_TMSPR_REGNUM (regno))
{
gdb_assert (tdep->have_htm);
@@ -953,6 +971,15 @@ fetch_ppc_registers (struct regcache *regcache, int tid)
PPC_LINUX_SIZEOF_TARREGSET,
&ppc32_linux_tarregset);
+ if (tdep->have_ebb)
+ fetch_regset (regcache, tid, NT_PPC_EBB,
+ PPC_LINUX_SIZEOF_EBBREGSET,
+ &ppc32_linux_ebbregset);
+ if (tdep->ppc_mmcr0_regnum != -1)
+ fetch_regset (regcache, tid, NT_PPC_PMU,
+ PPC_LINUX_SIZEOF_PMUREGSET,
+ &ppc32_linux_pmuregset);
+
if (tdep->have_htm)
{
fetch_regset (regcache, tid, NT_PPC_TM_SPR,
@@ -1196,6 +1223,24 @@ store_register (const struct regcache *regcache, int tid, int regno)
&ppc32_linux_tarregset);
return;
}
+ else if (PPC_IS_EBB_REGNUM (regno))
+ {
+ gdb_assert (tdep->have_ebb);
+
+ store_regset (regcache, tid, regno, NT_PPC_EBB,
+ PPC_LINUX_SIZEOF_EBBREGSET,
+ &ppc32_linux_ebbregset);
+ return;
+ }
+ else if (PPC_IS_PMU_REGNUM (regno))
+ {
+ gdb_assert (tdep->ppc_mmcr0_regnum != -1);
+
+ store_regset (regcache, tid, regno, NT_PPC_PMU,
+ PPC_LINUX_SIZEOF_PMUREGSET,
+ &ppc32_linux_pmuregset);
+ return;
+ }
else if (PPC_IS_TMSPR_REGNUM (regno))
{
gdb_assert (tdep->have_htm);
@@ -1544,6 +1589,19 @@ store_ppc_registers (const struct regcache *regcache, int tid)
PPC_LINUX_SIZEOF_TARREGSET,
&ppc32_linux_tarregset);
+ /* EBB/PMU registers can be unavailable. */
+ if (tdep->have_ebb
+ && ppc_linux_regset_available_p (regcache, &ppc32_linux_ebbregset))
+ store_regset (regcache, tid, -1, NT_PPC_EBB,
+ PPC_LINUX_SIZEOF_EBBREGSET,
+ &ppc32_linux_ebbregset);
+
+ if (tdep->ppc_mmcr0_regnum != -1
+ && ppc_linux_regset_available_p (regcache, &ppc32_linux_pmuregset))
+ store_regset (regcache, tid, -1, NT_PPC_PMU,
+ PPC_LINUX_SIZEOF_PMUREGSET,
+ &ppc32_linux_pmuregset);
+
if (tdep->have_htm)
{
store_regset (regcache, tid, -1, NT_PPC_TM_SPR,
@@ -2734,7 +2792,11 @@ ppc_linux_nat_target::read_description ()
features.ppr_dscr = true;
if ((hwcap2 & PPC_FEATURE2_ARCH_2_07)
&& (hwcap2 & PPC_FEATURE2_TAR)
- && check_regset (tid, NT_PPC_TAR, PPC_LINUX_SIZEOF_TARREGSET))
+ && (hwcap2 & PPC_FEATURE2_EBB)
+ && check_regset (tid, NT_PPC_TAR, PPC_LINUX_SIZEOF_TARREGSET)
+ && check_regset (tid, NT_PPC_EBB, PPC_LINUX_SIZEOF_EBBREGSET)
+ && check_regset (tid, NT_PPC_PMU, PPC_LINUX_SIZEOF_PMUREGSET))
+
{
features.isa207 = true;
if ((hwcap2 & PPC_FEATURE2_HTM)
diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c
index 74e4eec413..e9e710ac6b 100644
--- a/gdb/ppc-linux-tdep.c
+++ b/gdb/ppc-linux-tdep.c
@@ -541,6 +541,24 @@ static const struct regcache_map_entry ppc32_regmap_tar[] =
{ 0 }
};
+static const struct regcache_map_entry ppc32_regmap_ebb[] =
+ {
+ { 1, PPC_EBBRR_REGNUM, 8 },
+ { 1, PPC_EBBHR_REGNUM, 8 },
+ { 1, PPC_BESCR_REGNUM, 8 },
+ { 0 }
+ };
+
+static const struct regcache_map_entry ppc32_regmap_pmu[] =
+ {
+ { 1, PPC_SIAR_REGNUM, 8 },
+ { 1, PPC_SDAR_REGNUM, 8 },
+ { 1, PPC_SIER_REGNUM, 8 },
+ { 1, PPC_MMCR2_REGNUM, 8 },
+ { 1, PPC_MMCR0_REGNUM, 8 },
+ { 0 }
+ };
+
static const struct regcache_map_entry ppc32_regmap_tm_spr[] =
{
{ 1, PPC_TFHAR_REGNUM, 8 },
@@ -731,6 +749,18 @@ const struct regset ppc32_linux_tarregset = {
regcache_collect_regset
};
+const struct regset ppc32_linux_ebbregset = {
+ ppc32_regmap_ebb,
+ regcache_supply_regset,
+ regcache_collect_regset
+};
+
+const struct regset ppc32_linux_pmuregset = {
+ ppc32_regmap_pmu,
+ regcache_supply_regset,
+ regcache_collect_regset
+};
+
const struct regset ppc32_linux_tm_sprregset = {
ppc32_regmap_tm_spr,
regcache_supply_regset,
@@ -892,6 +922,23 @@ ppc_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
cb (".reg-ppc-tar", PPC_LINUX_SIZEOF_TARREGSET,
&ppc32_linux_tarregset, "Target Address Register", cb_data);
+ /* EBB/PMU registers are unavailable when ptrace returns ENODATA.
+ Check availability when generating a core file (regcache !=
+ NULL). */
+ if (tdep->have_ebb)
+ if (regcache == NULL
+ || REG_VALID == regcache->get_register_status (PPC_BESCR_REGNUM))
+ cb (".reg-ppc-ebb", PPC_LINUX_SIZEOF_EBBREGSET,
+ &ppc32_linux_ebbregset, "Event-based Branching Registers",
+ cb_data);
+
+ if (tdep->ppc_mmcr0_regnum != -1)
+ if (regcache == NULL
+ || REG_VALID == regcache->get_register_status (PPC_MMCR0_REGNUM))
+ cb (".reg-ppc-pmu", PPC_LINUX_SIZEOF_PMUREGSET,
+ &ppc32_linux_pmuregset, "Performance Monitor Registers",
+ cb_data);
+
if (tdep->have_htm)
{
cb (".reg-ppc-tm-spr", PPC_LINUX_SIZEOF_TM_SPRREGSET,
@@ -1407,6 +1454,11 @@ ppc_linux_core_read_description (struct gdbarch *gdbarch,
if (ppr && dscr)
{
features.ppr_dscr = true;
+
+ /* We don't require the EBB or PMU note sections to be present
+ in the core file to select isa207 because these registers
+ could have been unavailable when the core file was created.
+ They will be in the tdep but will show as unavailable. */
if (tar)
{
features.isa207 = true;
diff --git a/gdb/ppc-linux-tdep.h b/gdb/ppc-linux-tdep.h
index a68eca6d42..4c19d4a39a 100644
--- a/gdb/ppc-linux-tdep.h
+++ b/gdb/ppc-linux-tdep.h
@@ -59,6 +59,8 @@ int ppc_linux_trap_reg_p (struct gdbarch *gdbarch);
extern const struct regset ppc32_linux_pprregset;
extern const struct regset ppc32_linux_dscrregset;
extern const struct regset ppc32_linux_tarregset;
+extern const struct regset ppc32_linux_ebbregset;
+extern const struct regset ppc32_linux_pmuregset;
extern const struct regset ppc32_linux_tm_sprregset;
extern const struct regset ppc32_linux_cfprregset;
extern const struct regset ppc32_linux_cvsxregset;
diff --git a/gdb/ppc-tdep.h b/gdb/ppc-tdep.h
index ddb1c5e84b..f1ba4b6246 100644
--- a/gdb/ppc-tdep.h
+++ b/gdb/ppc-tdep.h
@@ -262,6 +262,15 @@ struct gdbarch_tdep
/* Target Address Register. */
int ppc_tar_regnum;
+ int have_ebb;
+
+ /* PMU registers. */
+ int ppc_mmcr0_regnum;
+ int ppc_mmcr2_regnum;
+ int ppc_siar_regnum;
+ int ppc_sdar_regnum;
+ int ppc_sier_regnum;
+
int have_htm;
/* HTM pseudo registers. */
@@ -326,36 +335,52 @@ enum {
PPC_PPR_REGNUM = 172,
PPC_DSCR_REGNUM = 173,
PPC_TAR_REGNUM = 174,
+ /* EBB registers. */
+ PPC_BESCR_REGNUM = 175,
+ PPC_EBBHR_REGNUM = 176,
+ PPC_EBBRR_REGNUM = 177,
+ /* PMU registers. */
+ PPC_MMCR0_REGNUM = 178,
+ PPC_MMCR2_REGNUM = 179,
+ PPC_SIAR_REGNUM = 180,
+ PPC_SDAR_REGNUM = 181,
+ PPC_SIER_REGNUM = 182,
/* Hardware transactional memory registers. */
- PPC_TFHAR_REGNUM = 175,
- PPC_TEXASR_REGNUM = 176,
- PPC_TFIAR_REGNUM = 177,
+ PPC_TFHAR_REGNUM = 183,
+ PPC_TEXASR_REGNUM = 184,
+ PPC_TFIAR_REGNUM = 185,
- PPC_CR0_REGNUM = 178,
- PPC_CCR_REGNUM = 210,
- PPC_CXER_REGNUM = 211,
- PPC_CLR_REGNUM = 212,
- PPC_CCTR_REGNUM = 213,
+ PPC_CR0_REGNUM = 186,
+ PPC_CCR_REGNUM = 218,
+ PPC_CXER_REGNUM = 219,
+ PPC_CLR_REGNUM = 220,
+ PPC_CCTR_REGNUM = 221,
- PPC_CF0_REGNUM = 214,
- PPC_CFPSCR_REGNUM = 246,
+ PPC_CF0_REGNUM = 222,
+ PPC_CFPSCR_REGNUM = 254,
- PPC_CVR0_REGNUM = 247,
- PPC_CVSCR_REGNUM = 279,
- PPC_CVRSAVE_REGNUM = 280,
+ PPC_CVR0_REGNUM = 255,
+ PPC_CVSCR_REGNUM = 287,
+ PPC_CVRSAVE_REGNUM = 288,
- PPC_CVS0H_REGNUM = 281,
+ PPC_CVS0H_REGNUM = 289,
- PPC_CPPR_REGNUM = 313,
- PPC_CDSCR_REGNUM = 314,
- PPC_CTAR_REGNUM = 315,
+ PPC_CPPR_REGNUM = 321,
+ PPC_CDSCR_REGNUM = 322,
+ PPC_CTAR_REGNUM = 323,
PPC_NUM_REGS
};
/* Big enough to hold the size of the largest register in bytes. */
#define PPC_MAX_REGISTER_SIZE 64
+#define PPC_IS_EBB_REGNUM(i) \
+ ((i) >= PPC_BESCR_REGNUM && (i) <= PPC_EBBRR_REGNUM)
+
+#define PPC_IS_PMU_REGNUM(i) \
+ ((i) >= PPC_MMCR0_REGNUM && (i) <= PPC_SIER_REGNUM)
+
#define PPC_IS_TMSPR_REGNUM(i) \
((i) >= PPC_TFHAR_REGNUM && (i) <= PPC_TFIAR_REGNUM)
diff --git a/gdb/regformats/rs6000/powerpc-isa207-htm-vsx32l.dat b/gdb/regformats/rs6000/powerpc-isa207-htm-vsx32l.dat
index 6f5bbad28f..c19416db86 100644
--- a/gdb/regformats/rs6000/powerpc-isa207-htm-vsx32l.dat
+++ b/gdb/regformats/rs6000/powerpc-isa207-htm-vsx32l.dat
@@ -145,6 +145,14 @@ expedite:r1,pc
64:ppr
64:dscr
64:tar
+64:bescr
+64:ebbhr
+64:ebbrr
+64:mmcr0
+64:mmcr2
+64:siar
+64:sdar
+64:sier
64:tfhar
64:texasr
64:tfiar
diff --git a/gdb/regformats/rs6000/powerpc-isa207-htm-vsx64l.dat b/gdb/regformats/rs6000/powerpc-isa207-htm-vsx64l.dat
index 2f3d21c4c6..38359959fd 100644
--- a/gdb/regformats/rs6000/powerpc-isa207-htm-vsx64l.dat
+++ b/gdb/regformats/rs6000/powerpc-isa207-htm-vsx64l.dat
@@ -145,6 +145,14 @@ expedite:r1,pc
64:ppr
64:dscr
64:tar
+64:bescr
+64:ebbhr
+64:ebbrr
+64:mmcr0
+64:mmcr2
+64:siar
+64:sdar
+64:sier
64:tfhar
64:texasr
64:tfiar
diff --git a/gdb/regformats/rs6000/powerpc-isa207-vsx32l.dat b/gdb/regformats/rs6000/powerpc-isa207-vsx32l.dat
index 2b6e0a9c8d..0718d72d93 100644
--- a/gdb/regformats/rs6000/powerpc-isa207-vsx32l.dat
+++ b/gdb/regformats/rs6000/powerpc-isa207-vsx32l.dat
@@ -145,3 +145,11 @@ expedite:r1,pc
64:ppr
64:dscr
64:tar
+64:bescr
+64:ebbhr
+64:ebbrr
+64:mmcr0
+64:mmcr2
+64:siar
+64:sdar
+64:sier
diff --git a/gdb/regformats/rs6000/powerpc-isa207-vsx64l.dat b/gdb/regformats/rs6000/powerpc-isa207-vsx64l.dat
index 095bd7f2d3..510c6c87da 100644
--- a/gdb/regformats/rs6000/powerpc-isa207-vsx64l.dat
+++ b/gdb/regformats/rs6000/powerpc-isa207-vsx64l.dat
@@ -145,3 +145,11 @@ expedite:r1,pc
64:ppr
64:dscr
64:tar
+64:bescr
+64:ebbhr
+64:ebbrr
+64:mmcr0
+64:mmcr2
+64:siar
+64:sdar
+64:sier
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
index 6687e20d2b..0c19a4c557 100644
--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -5954,7 +5954,7 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
enum powerpc_elf_abi elf_abi = POWERPC_ELF_AUTO;
int have_fpu = 0, have_spe = 0, have_mq = 0, have_altivec = 0;
int have_dfp = 0, have_vsx = 0, have_ppr = 0, have_dscr = 0;
- int have_tar = 0, have_htm = 0;
+ int have_tar = 0, have_ebb = 0, have_pmu = 0, have_htm = 0;
int tdesc_wordsize = -1;
const struct target_desc *tdesc = info.target_desc;
struct tdesc_arch_data *tdesc_data = NULL;
@@ -6295,6 +6295,54 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
else
have_tar = 0;
+ /* Event-based Branching Registers. */
+ feature = tdesc_find_feature (tdesc,
+ "org.gnu.gdb.power.ebb");
+ if (feature != NULL)
+ {
+ static const char *const ebb_regs[] = {
+ "bescr", "ebbhr", "ebbrr"
+ };
+
+ valid_p = 1;
+ for (i = 0; i < ARRAY_SIZE (ebb_regs); i++)
+ valid_p &= tdesc_numbered_register (feature, tdesc_data,
+ PPC_BESCR_REGNUM + i,
+ ebb_regs[i]);
+ if (!valid_p)
+ {
+ tdesc_data_cleanup (tdesc_data);
+ return NULL;
+ }
+ have_ebb = 1;
+ }
+ else
+ have_ebb = 0;
+
+ /* Performance Monitor Registers. */
+ feature = tdesc_find_feature (tdesc,
+ "org.gnu.gdb.power.pmu");
+ if (feature != NULL)
+ {
+ static const char *const pmu_regs[] = {
+ "mmcr0", "mmcr2", "siar", "sdar", "sier"
+ };
+
+ valid_p = 1;
+ for (i = 0; i < ARRAY_SIZE (pmu_regs); i++)
+ valid_p &= tdesc_numbered_register (feature, tdesc_data,
+ PPC_MMCR0_REGNUM + i,
+ pmu_regs[i]);
+ if (!valid_p)
+ {
+ tdesc_data_cleanup (tdesc_data);
+ return NULL;
+ }
+ have_pmu = 1;
+ }
+ else
+ have_pmu = 0;
+
/* Hardware Transactional Memory Registers. */
feature = tdesc_find_feature (tdesc,
"org.gnu.gdb.power.htm");
@@ -6582,6 +6630,21 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
tdep->ppc_ppr_regnum = have_ppr ? PPC_PPR_REGNUM : -1;
tdep->ppc_dscr_regnum = have_dscr ? PPC_DSCR_REGNUM : -1;
tdep->ppc_tar_regnum = have_tar ? PPC_TAR_REGNUM : -1;
+ tdep->have_ebb = have_ebb;
+
+ /* If additional pmu registers are added, care must be taken when
+ setting new fields in the tdep below, to maintain compatibility
+ with features that only provide some of the registers. Currently
+ gdb access to the pmu registers is only supported in linux, and
+ linux only provides a subset of the pmu registers defined in the
+ architecture. */
+
+ tdep->ppc_mmcr0_regnum = have_pmu ? PPC_MMCR0_REGNUM : -1;
+ tdep->ppc_mmcr2_regnum = have_pmu ? PPC_MMCR2_REGNUM : -1;
+ tdep->ppc_siar_regnum = have_pmu ? PPC_SIAR_REGNUM : -1;
+ tdep->ppc_sdar_regnum = have_pmu ? PPC_SDAR_REGNUM : -1;
+ tdep->ppc_sier_regnum = have_pmu ? PPC_SIER_REGNUM : -1;
+
tdep->have_htm = have_htm;
set_gdbarch_pc_regnum (gdbarch, PPC_PC_REGNUM);