From 5cd559a4388df0fd06a6450d5f768678da6e7759 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Wed, 11 Apr 2007 16:04:23 +0000 Subject: [PATCH] * gdbtypes.h (TYPE_FLAG_STUB_SUPPORTED, TYPE_STUB_SUPPORTED): New macros. (TYPE_IS_OPAQUE): Empty vs. opaque structures are now distinct on the TYPE_STUB_SUPPORTED debug targets. * dwarf2read.c (read_structure_type): Set TYPE_FLAG_STUB_SUPPORTED. --- gdb/ChangeLog | 8 ++++++++ gdb/dwarf2read.c | 1 + gdb/gdbtypes.h | 11 ++++++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0e7168fb75..eb7d253afa 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2007-04-11 Jan Kratochvil + + * gdbtypes.h (TYPE_FLAG_STUB_SUPPORTED, TYPE_STUB_SUPPORTED): New + macros. + (TYPE_IS_OPAQUE): Empty vs. opaque structures are now + distinct on the TYPE_STUB_SUPPORTED debug targets. + * dwarf2read.c (read_structure_type): Set TYPE_FLAG_STUB_SUPPORTED. + 2007-04-11 Joel Brobecker * sparc-tdep.c (X_RS2): New macro. diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 0fb35006e0..d0a1bb19d8 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -3879,6 +3879,7 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu) TYPE_LENGTH (type) = 0; } + TYPE_FLAGS (type) |= TYPE_FLAG_STUB_SUPPORTED; if (die_is_declaration (die, cu)) TYPE_FLAGS (type) |= TYPE_FLAG_STUB; diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 8cbd26ce49..39ed5ccd15 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -319,6 +319,14 @@ enum type_code #define TYPE_FLAG_FIXED_INSTANCE (1 << 15) +/* This debug target supports TYPE_STUB(t). In the unsupported case we have to + rely on NFIELDS to be zero etc., see TYPE_IS_OPAQUE (). + TYPE_STUB(t) with !TYPE_STUB_SUPPORTED(t) may exist if we only guessed + the TYPE_STUB(t) value (see dwarfread.c). */ + +#define TYPE_FLAG_STUB_SUPPORTED (1 << 16) +#define TYPE_STUB_SUPPORTED(t) (TYPE_FLAGS (t) & TYPE_FLAG_STUB_SUPPORTED) + /* Array bound type. */ enum array_bound_type { @@ -969,7 +977,8 @@ extern void allocate_cplus_struct_type (struct type *); #define TYPE_IS_OPAQUE(thistype) (((TYPE_CODE (thistype) == TYPE_CODE_STRUCT) || \ (TYPE_CODE (thistype) == TYPE_CODE_UNION)) && \ (TYPE_NFIELDS (thistype) == 0) && \ - (TYPE_CPLUS_SPECIFIC (thistype) && (TYPE_NFN_FIELDS (thistype) == 0))) + (TYPE_CPLUS_SPECIFIC (thistype) && (TYPE_NFN_FIELDS (thistype) == 0)) && \ + (TYPE_STUB (thistype) || !TYPE_STUB_SUPPORTED (thistype))) struct builtin_type { -- 2.11.0