]> git.sur5r.net Git - openocd/commitdiff
tdesc: bitfields may carry a type
authorMatthias Welwarsky <matthias.welwarsky@sysgo.com>
Thu, 8 Mar 2018 13:40:10 +0000 (14:40 +0100)
committerMatthias Welwarsky <matthias@welwarsky.de>
Tue, 27 Mar 2018 08:15:27 +0000 (09:15 +0100)
a bitfield may carry a type (bool or int), add support for that.

Change-Id: Ic831a9b8eac8579e8fdd7d0f01b7f1c9259e6739
Signed-off-by: Matthias Welwarsky <matthias.welwarsky@sysgo.com>
Reviewed-on: http://openocd.zylin.com/4459
Tested-by: jenkins
Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
src/server/gdb_server.c
src/target/register.h

index 74074a1f116c139ce32fdf24ef3f67ec16d7b207..428547b460764982da6088bd373ffb4e83a43f11 100644 (file)
@@ -1909,6 +1909,8 @@ static int gdb_memory_map(struct connection *connection,
 static const char *gdb_get_reg_type_name(enum reg_type type)
 {
        switch (type) {
+               case REG_TYPE_BOOL:
+                       return "bool";
                case REG_TYPE_INT:
                        return "int";
                case REG_TYPE_INT8:
@@ -1921,6 +1923,8 @@ static const char *gdb_get_reg_type_name(enum reg_type type)
                        return "int64";
                case REG_TYPE_INT128:
                        return "int128";
+               case REG_TYPE_UINT:
+                       return "uint";
                case REG_TYPE_UINT8:
                        return "uint8";
                case REG_TYPE_UINT16:
@@ -2040,9 +2044,9 @@ static int gdb_generate_reg_type_description(struct target *target,
                                        type->id, type->reg_type_struct->size);
                        while (field != NULL) {
                                xml_printf(&retval, tdesc, pos, size,
-                                               "<field name=\"%s\" start=\"%d\" end=\"%d\"/>\n",
-                                               field->name, field->bitfield->start,
-                                               field->bitfield->end);
+                                               "<field name=\"%s\" start=\"%d\" end=\"%d\" type=\"%s\" />\n",
+                                               field->name, field->bitfield->start, field->bitfield->end,
+                                               gdb_get_reg_type_name(field->bitfield->type));
 
                                field = field->next;
                        }
@@ -2088,8 +2092,9 @@ static int gdb_generate_reg_type_description(struct target *target,
                field = type->reg_type_flags->fields;
                while (field != NULL) {
                        xml_printf(&retval, tdesc, pos, size,
-                                       "<field name=\"%s\" start=\"%d\" end=\"%d\"/>\n",
-                                       field->name, field->bitfield->start, field->bitfield->end);
+                                       "<field name=\"%s\" start=\"%d\" end=\"%d\" type=\"%s\" />\n",
+                                       field->name, field->bitfield->start, field->bitfield->end,
+                                       gdb_get_reg_type_name(field->bitfield->type));
 
                        field = field->next;
                }
index dc18e9a89935cf9038791303c1f14801c2eb9218..32c1f39aceadc50b55673de05137a994565a3182 100644 (file)
 struct target;
 
 enum reg_type {
+       REG_TYPE_BOOL,
        REG_TYPE_INT,
        REG_TYPE_INT8,
        REG_TYPE_INT16,
        REG_TYPE_INT32,
        REG_TYPE_INT64,
        REG_TYPE_INT128,
+       REG_TYPE_UINT,
        REG_TYPE_UINT8,
        REG_TYPE_UINT16,
        REG_TYPE_UINT32,
@@ -66,6 +68,7 @@ struct reg_data_type_union {
 struct reg_data_type_bitfield {
        uint32_t start;
        uint32_t end;
+       enum reg_type type;
 };
 
 struct reg_data_type_struct_field {