aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog18
-rw-r--r--gdb/gdb-gdb.py5
-rw-r--r--gdb/gdbtypes.c7
-rw-r--r--gdb/gdbtypes.h25
4 files changed, 45 insertions, 10 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index ee69551..b97d44d 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,23 @@
2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+ Code reshuffle.
+ * gdb-gdb.py (StructMainTypePrettyPrinter): Change
+ TYPE_SPECIFIC_CALLING_CONVENTION to TYPE_SPECIFIC_FUNC. Move
+ calling_convention under func_stuff there.
+ * gdbtypes.c (make_function_type): Call INIT_FUNC_SPECIFIC.
+ (init_type) <TYPE_CODE_FUNC>: Likewise.
+ (recursive_dump_type): Change TYPE_SPECIFIC_CALLING_CONVENTION to
+ TYPE_SPECIFIC_FUNC. New comment for tail_call_list.
+ * gdbtypes.h (enum type_specific_kind): Change
+ TYPE_SPECIFIC_CALLING_CONVENTION to TYPE_SPECIFIC_FUNC.
+ (struct main_type) <type_specific>: Change calling_convention to
+ func_stuff. Move calling_convention to ...
+ (struct func_type): ... this new struct.
+ (INIT_FUNC_SPECIFIC): New #define.
+ (TYPE_CALLING_CONVENTION): Change calling_convention to func_stuff.
+
+2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+
Fix DW_OP_GNU_implicit_pointer for DWARF32 v3+ on 64-bit arches.
* dwarf2-frame.c (execute_stack_op): Initialize ctx->ref_addr_size.
* dwarf2expr.c (execute_stack_op) <DW_OP_GNU_implicit_pointer>: Use
diff --git a/gdb/gdb-gdb.py b/gdb/gdb-gdb.py
index 17adee8..ae1d742 100644
--- a/gdb/gdb-gdb.py
+++ b/gdb/gdb-gdb.py
@@ -201,9 +201,10 @@ class StructMainTypePrettyPrinter:
% type_specific['gnat_stuff']['descriptive_type'])
elif type_specific_kind == "TYPE_SPECIFIC_FLOATFORMAT":
img = "floatformat[0..1] = %s" % type_specific['floatformat']
- elif type_specific_kind == "TYPE_SPECIFIC_CALLING_CONVENTION":
+ elif type_specific_kind == "TYPE_SPECIFIC_FUNC":
img = ("calling_convention = %d"
- % type_specific['calling_convention'])
+ % type_specific['func_stuff']['calling_convention'])
+ # tail_call_list is not printed.
else:
img = ("type_specific = ??? (unknown type_secific_kind: %s)"
% type_specific_kind)
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index da9bade..b1dada5 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -450,6 +450,8 @@ make_function_type (struct type *type, struct type **typeptr)
TYPE_LENGTH (ntype) = 1;
TYPE_CODE (ntype) = TYPE_CODE_FUNC;
+ INIT_FUNC_SPECIFIC (ntype);
+
return ntype;
}
@@ -1951,7 +1953,7 @@ init_type (enum type_code code, int length, int flags,
TYPE_SPECIFIC_FIELD (type) = TYPE_SPECIFIC_FLOATFORMAT;
break;
case TYPE_CODE_FUNC:
- TYPE_SPECIFIC_FIELD (type) = TYPE_SPECIFIC_CALLING_CONVENTION;
+ INIT_FUNC_SPECIFIC (type);
break;
}
return type;
@@ -3257,9 +3259,10 @@ recursive_dump_type (struct type *type, int spaces)
puts_filtered ("\n");
break;
- case TYPE_SPECIFIC_CALLING_CONVENTION:
+ case TYPE_SPECIFIC_FUNC:
printfi_filtered (spaces, "calling_convention %d\n",
TYPE_CALLING_CONVENTION (type));
+ /* tail_call_list is not printed. */
break;
}
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index 1e96293..e78aa0d 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -368,7 +368,7 @@ enum type_specific_kind
TYPE_SPECIFIC_CPLUS_STUFF,
TYPE_SPECIFIC_GNAT_STUFF,
TYPE_SPECIFIC_FLOATFORMAT,
- TYPE_SPECIFIC_CALLING_CONVENTION
+ TYPE_SPECIFIC_FUNC
};
/* This structure is space-critical.
@@ -601,10 +601,8 @@ struct main_type
const struct floatformat **floatformat;
- /* For TYPE_CODE_FUNC types, the calling convention for targets
- supporting multiple ABIs. Right now this is only fetched from
- the Dwarf-2 DW_AT_calling_convention attribute. */
- unsigned calling_convention;
+ /* For TYPE_CODE_FUNC types, */
+ struct func_type *func_stuff;
} type_specific;
};
@@ -890,6 +888,15 @@ struct gnat_aux_type
struct type* descriptive_type;
};
+/* For TYPE_CODE_FUNC types, */
+struct func_type
+ {
+ /* The calling convention for targets supporting multiple ABIs. Right now
+ this is only fetched from the Dwarf-2 DW_AT_calling_convention
+ attribute. */
+ unsigned calling_convention;
+ };
+
/* The default value of TYPE_CPLUS_SPECIFIC(T) points to the
this shared static structure. */
@@ -921,6 +928,12 @@ extern void allocate_gnat_aux_type (struct type *);
#define HAVE_GNAT_AUX_INFO(type) \
(TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_GNAT_STUFF)
+#define INIT_FUNC_SPECIFIC(type) \
+ (TYPE_SPECIFIC_FIELD (type) = TYPE_SPECIFIC_FUNC, \
+ TYPE_MAIN_TYPE (type)->type_specific.func_stuff \
+ = TYPE_ZALLOC (type, \
+ sizeof (*TYPE_MAIN_TYPE (type)->type_specific.func_stuff)))
+
#define TYPE_INSTANCE_FLAGS(thistype) (thistype)->instance_flags
#define TYPE_MAIN_TYPE(thistype) (thistype)->main_type
#define TYPE_NAME(thistype) TYPE_MAIN_TYPE(thistype)->name
@@ -986,7 +999,7 @@ extern void allocate_gnat_aux_type (struct type *);
#define TYPE_FLOATFORMAT(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.floatformat
#define TYPE_GNAT_SPECIFIC(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.gnat_stuff
#define TYPE_DESCRIPTIVE_TYPE(thistype) TYPE_GNAT_SPECIFIC(thistype)->descriptive_type
-#define TYPE_CALLING_CONVENTION(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.calling_convention
+#define TYPE_CALLING_CONVENTION(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.func_stuff->calling_convention
#define TYPE_BASECLASS(thistype,index) TYPE_FIELD_TYPE(thistype, index)
#define TYPE_N_BASECLASSES(thistype) TYPE_CPLUS_SPECIFIC(thistype)->n_baseclasses
#define TYPE_BASECLASS_NAME(thistype,index) TYPE_FIELD_NAME(thistype, index)