diff options
-rw-r--r-- | gdb/ChangeLog | 18 | ||||
-rw-r--r-- | gdb/gdb-gdb.py | 5 | ||||
-rw-r--r-- | gdb/gdbtypes.c | 7 | ||||
-rw-r--r-- | gdb/gdbtypes.h | 25 |
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) |