580 lines
23 KiB
Diff
580 lines
23 KiB
Diff
|
http://sourceware.org/ml/gdb-cvs/2008-10/msg00099.html
|
||
|
|
||
|
2008-10-08 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||
|
|
||
|
Convert static_kind into loc_kind enum.
|
||
|
* gdbtypes.h (enum field_loc_kind): New.
|
||
|
(union field_location): New field dwarf_block.
|
||
|
(struct field): Rename static_kind as loc_kind.
|
||
|
(FIELD_STATIC_KIND): Rename to ...
|
||
|
(FIELD_LOC_KIND): ... here.
|
||
|
(TYPE_FIELD_STATIC_KIND): Rename to ...
|
||
|
(TYPE_FIELD_LOC_KIND): ... here and use there now new FIELD_LOC_KIND.
|
||
|
(TYPE_FIELD_STATIC_HAS_ADDR): Remove.
|
||
|
(TYPE_FIELD_STATIC): Remove.
|
||
|
(TYPE_FIELD_BITPOS): Reformat.
|
||
|
(SET_FIELD_BITPOS): New.
|
||
|
(FIELD_PHYSADDR): Rename to ...
|
||
|
(FIELD_STATIC_PHYSADDR): ... here.
|
||
|
(TYPE_FIELD_STATIC_PHYSADDR): Follow the FIELD_PHYSADDR rename.
|
||
|
(SET_FIELD_PHYSADDR): Use new FIELD_LOC_KIND.
|
||
|
(FIELD_PHYSNAME): Rename to ...
|
||
|
(FIELD_STATIC_PHYSNAME): ... here.
|
||
|
(TYPE_FIELD_STATIC_PHYSNAME): Follow the FIELD_PHYSNAME rename.
|
||
|
(SET_FIELD_PHYSNAME): Use new FIELD_LOC_KIND.
|
||
|
(FIELD_DWARF_BLOCK, TYPE_FIELD_DWARF_BLOCK, SET_FIELD_DWARF_BLOCK): New.
|
||
|
(field_is_static): New declaration.
|
||
|
* gdbtypes.c (field_is_static): New function.
|
||
|
(copy_type_recursive): Update throughout.
|
||
|
* amd64-tdep.c, c-typeprint.c, coffread.c, cp-valprint.c, dwarf2read.c,
|
||
|
eval.c, jv-typeprint.c, jv-valprint.c, mdebugread.c, p-typeprint.c,
|
||
|
p-valprint.c, valops.c, value.c, varobj.c: Update throughout.
|
||
|
|
||
|
[ Ported to gdb-6.8fedora. ]
|
||
|
|
||
|
--- ./gdb/amd64-tdep.c 2008-10-29 10:47:21.000000000 +0100
|
||
|
+++ ./gdb/amd64-tdep.c 2008-10-29 20:56:57.000000000 +0100
|
||
|
@@ -317,7 +317,7 @@ amd64_classify_aggregate (struct type *t
|
||
|
enum amd64_reg_class subclass[2];
|
||
|
|
||
|
/* Ignore static fields. */
|
||
|
- if (TYPE_FIELD_STATIC (type, i))
|
||
|
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
||
|
continue;
|
||
|
|
||
|
gdb_assert (pos == 0 || pos == 1);
|
||
|
--- ./gdb/c-typeprint.c 2008-10-29 10:55:07.000000000 +0100
|
||
|
+++ ./gdb/c-typeprint.c 2008-10-29 20:56:57.000000000 +0100
|
||
|
@@ -872,14 +872,12 @@ c_type_print_base (struct type *type, st
|
||
|
}
|
||
|
|
||
|
print_spaces_filtered (level + 4, stream);
|
||
|
- if (TYPE_FIELD_STATIC (type, i))
|
||
|
- {
|
||
|
- fprintf_filtered (stream, "static ");
|
||
|
- }
|
||
|
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
||
|
+ fprintf_filtered (stream, "static ");
|
||
|
c_print_type (TYPE_FIELD_TYPE (type, i),
|
||
|
TYPE_FIELD_NAME (type, i),
|
||
|
stream, show - 1, level + 4);
|
||
|
- if (!TYPE_FIELD_STATIC (type, i)
|
||
|
+ if (!field_is_static (&TYPE_FIELD (type, i))
|
||
|
&& TYPE_FIELD_PACKED (type, i))
|
||
|
{
|
||
|
/* It is a bitfield. This code does not attempt
|
||
|
--- ./gdb/coffread.c 2008-01-16 12:21:42.000000000 +0100
|
||
|
+++ ./gdb/coffread.c 2008-10-29 20:58:56.000000000 +0100
|
||
|
@@ -1946,9 +1946,8 @@ coff_read_struct_type (int index, int le
|
||
|
strlen (name),
|
||
|
¤t_objfile->objfile_obstack);
|
||
|
FIELD_TYPE (list->field) = decode_type (ms, ms->c_type, &sub_aux);
|
||
|
- FIELD_BITPOS (list->field) = 8 * ms->c_value;
|
||
|
+ SET_FIELD_BITPOS (list->field, 8 * ms->c_value);
|
||
|
FIELD_BITSIZE (list->field) = 0;
|
||
|
- FIELD_STATIC_KIND (list->field) = 0;
|
||
|
nfields++;
|
||
|
break;
|
||
|
|
||
|
@@ -1965,9 +1964,8 @@ coff_read_struct_type (int index, int le
|
||
|
strlen (name),
|
||
|
¤t_objfile->objfile_obstack);
|
||
|
FIELD_TYPE (list->field) = decode_type (ms, ms->c_type, &sub_aux);
|
||
|
- FIELD_BITPOS (list->field) = ms->c_value;
|
||
|
+ SET_FIELD_BITPOS (list->field, ms->c_value);
|
||
|
FIELD_BITSIZE (list->field) = sub_aux.x_sym.x_misc.x_lnsz.x_size;
|
||
|
- FIELD_STATIC_KIND (list->field) = 0;
|
||
|
nfields++;
|
||
|
break;
|
||
|
|
||
|
@@ -2083,11 +2081,10 @@ coff_read_enum_type (int index, int leng
|
||
|
struct symbol *xsym = syms->symbol[j];
|
||
|
SYMBOL_TYPE (xsym) = type;
|
||
|
TYPE_FIELD_NAME (type, n) = DEPRECATED_SYMBOL_NAME (xsym);
|
||
|
- TYPE_FIELD_BITPOS (type, n) = SYMBOL_VALUE (xsym);
|
||
|
+ SET_FIELD_BITPOS (TYPE_FIELD (type, n), SYMBOL_VALUE (xsym));
|
||
|
if (SYMBOL_VALUE (xsym) < 0)
|
||
|
unsigned_enum = 0;
|
||
|
TYPE_FIELD_BITSIZE (type, n) = 0;
|
||
|
- TYPE_FIELD_STATIC_KIND (type, n) = 0;
|
||
|
}
|
||
|
if (syms == osyms)
|
||
|
break;
|
||
|
--- ./gdb/cp-valprint.c 2008-01-01 23:53:09.000000000 +0100
|
||
|
+++ ./gdb/cp-valprint.c 2008-10-29 20:56:57.000000000 +0100
|
||
|
@@ -192,7 +192,8 @@ cp_print_value_fields (struct type *type
|
||
|
for (i = n_baseclasses; i < len; i++)
|
||
|
{
|
||
|
/* If requested, skip printing of static fields. */
|
||
|
- if (!static_field_print && TYPE_FIELD_STATIC (type, i))
|
||
|
+ if (!static_field_print
|
||
|
+ && field_is_static (&TYPE_FIELD (type, i)))
|
||
|
continue;
|
||
|
|
||
|
if (fields_seen)
|
||
|
@@ -225,7 +226,7 @@ cp_print_value_fields (struct type *type
|
||
|
fputs_filtered ("\"( ptr \"", stream);
|
||
|
else
|
||
|
fputs_filtered ("\"( nodef \"", stream);
|
||
|
- if (TYPE_FIELD_STATIC (type, i))
|
||
|
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
||
|
fputs_filtered ("static ", stream);
|
||
|
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
|
||
|
current_language->la_language,
|
||
|
@@ -240,7 +241,7 @@ cp_print_value_fields (struct type *type
|
||
|
{
|
||
|
annotate_field_begin (TYPE_FIELD_TYPE (type, i));
|
||
|
|
||
|
- if (TYPE_FIELD_STATIC (type, i))
|
||
|
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
||
|
fputs_filtered ("static ", stream);
|
||
|
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
|
||
|
current_language->la_language,
|
||
|
@@ -252,7 +253,8 @@ cp_print_value_fields (struct type *type
|
||
|
annotate_field_value ();
|
||
|
}
|
||
|
|
||
|
- if (!TYPE_FIELD_STATIC (type, i) && TYPE_FIELD_PACKED (type, i))
|
||
|
+ if (!field_is_static (&TYPE_FIELD (type, i))
|
||
|
+ && TYPE_FIELD_PACKED (type, i))
|
||
|
{
|
||
|
struct value *v;
|
||
|
|
||
|
@@ -277,7 +279,7 @@ cp_print_value_fields (struct type *type
|
||
|
{
|
||
|
fputs_filtered ("<optimized out or zero length>", stream);
|
||
|
}
|
||
|
- else if (TYPE_FIELD_STATIC (type, i))
|
||
|
+ else if (field_is_static (&TYPE_FIELD (type, i)))
|
||
|
{
|
||
|
struct value *v = value_static_field (type, i);
|
||
|
if (v == NULL)
|
||
|
--- ./gdb/dwarf2read.c 2008-10-29 10:50:56.000000000 +0100
|
||
|
+++ ./gdb/dwarf2read.c 2008-10-29 20:56:57.000000000 +0100
|
||
|
@@ -3492,7 +3492,7 @@ dwarf2_add_field (struct field_info *fip
|
||
|
/* Get type of field. */
|
||
|
fp->type = die_type (die, cu);
|
||
|
|
||
|
- FIELD_STATIC_KIND (*fp) = 0;
|
||
|
+ SET_FIELD_BITPOS (*fp, 0);
|
||
|
|
||
|
/* Get bit size of field (zero if none). */
|
||
|
attr = dwarf2_attr (die, DW_AT_bit_size, cu);
|
||
|
@@ -3521,10 +3521,8 @@ dwarf2_add_field (struct field_info *fip
|
||
|
else
|
||
|
byte_offset = decode_locdesc (DW_BLOCK (attr), cu);
|
||
|
|
||
|
- FIELD_BITPOS (*fp) = byte_offset * bits_per_byte;
|
||
|
+ SET_FIELD_BITPOS (*fp, byte_offset * bits_per_byte);
|
||
|
}
|
||
|
- else
|
||
|
- FIELD_BITPOS (*fp) = 0;
|
||
|
attr = dwarf2_attr (die, DW_AT_bit_offset, cu);
|
||
|
if (attr)
|
||
|
{
|
||
|
@@ -3617,10 +3615,9 @@ dwarf2_add_field (struct field_info *fip
|
||
|
/* C++ base class field. */
|
||
|
attr = dwarf2_attr (die, DW_AT_data_member_location, cu);
|
||
|
if (attr)
|
||
|
- FIELD_BITPOS (*fp) = (decode_locdesc (DW_BLOCK (attr), cu)
|
||
|
- * bits_per_byte);
|
||
|
+ SET_FIELD_BITPOS (*fp, decode_locdesc (DW_BLOCK (attr), cu)
|
||
|
+ * bits_per_byte);
|
||
|
FIELD_BITSIZE (*fp) = 0;
|
||
|
- FIELD_STATIC_KIND (*fp) = 0;
|
||
|
FIELD_TYPE (*fp) = die_type (die, cu);
|
||
|
FIELD_NAME (*fp) = type_name_no_tag (fp->type);
|
||
|
fip->nbaseclasses++;
|
||
|
@@ -4379,9 +4376,8 @@ process_enumeration_scope (struct die_in
|
||
|
|
||
|
FIELD_NAME (fields[num_fields]) = DEPRECATED_SYMBOL_NAME (sym);
|
||
|
FIELD_TYPE (fields[num_fields]) = NULL;
|
||
|
- FIELD_BITPOS (fields[num_fields]) = SYMBOL_VALUE (sym);
|
||
|
+ SET_FIELD_BITPOS (fields[num_fields], SYMBOL_VALUE (sym));
|
||
|
FIELD_BITSIZE (fields[num_fields]) = 0;
|
||
|
- FIELD_STATIC_KIND (fields[num_fields]) = 0;
|
||
|
|
||
|
num_fields++;
|
||
|
}
|
||
|
--- ./gdb/eval.c 2008-10-29 10:55:07.000000000 +0100
|
||
|
+++ ./gdb/eval.c 2008-10-29 20:56:57.000000000 +0100
|
||
|
@@ -288,7 +288,8 @@ evaluate_struct_tuple (struct value *str
|
||
|
fieldno++;
|
||
|
/* Skip static fields. */
|
||
|
while (fieldno < TYPE_NFIELDS (struct_type)
|
||
|
- && TYPE_FIELD_STATIC_KIND (struct_type, fieldno))
|
||
|
+ && field_is_static (&TYPE_FIELD (struct_type,
|
||
|
+ fieldno)))
|
||
|
fieldno++;
|
||
|
subfieldno = fieldno;
|
||
|
if (fieldno >= TYPE_NFIELDS (struct_type))
|
||
|
--- ./gdb/gdbtypes.c 2008-10-29 10:55:07.000000000 +0100
|
||
|
+++ ./gdb/gdbtypes.c 2008-10-29 20:56:57.000000000 +0100
|
||
|
@@ -2407,6 +2407,20 @@ print_arg_types (struct field *args, int
|
||
|
}
|
||
|
}
|
||
|
|
||
|
+int
|
||
|
+field_is_static (struct field *f)
|
||
|
+{
|
||
|
+ /* "static" fields are the fields whose location is not relative
|
||
|
+ to the address of the enclosing struct. It would be nice to
|
||
|
+ have a dedicated flag that would be set for static fields when
|
||
|
+ the type is being created. But in practice, checking the field
|
||
|
+ loc_kind should give us an accurate answer (at least as long as
|
||
|
+ we assume that DWARF block locations are not going to be used
|
||
|
+ for static fields). FIXME? */
|
||
|
+ return (FIELD_LOC_KIND (*f) == FIELD_LOC_KIND_PHYSNAME
|
||
|
+ || FIELD_LOC_KIND (*f) == FIELD_LOC_KIND_PHYSADDR);
|
||
|
+}
|
||
|
+
|
||
|
static void
|
||
|
dump_fn_fieldlists (struct type *type, int spaces)
|
||
|
{
|
||
|
@@ -2939,18 +2953,25 @@ copy_type_recursive (struct objfile *obj
|
||
|
if (TYPE_FIELD_NAME (type, i))
|
||
|
TYPE_FIELD_NAME (new_type, i) =
|
||
|
xstrdup (TYPE_FIELD_NAME (type, i));
|
||
|
- if (TYPE_FIELD_STATIC_HAS_ADDR (type, i))
|
||
|
- SET_FIELD_PHYSADDR (TYPE_FIELD (new_type, i),
|
||
|
- TYPE_FIELD_STATIC_PHYSADDR (type, i));
|
||
|
- else if (TYPE_FIELD_STATIC (type, i))
|
||
|
- SET_FIELD_PHYSNAME (TYPE_FIELD (new_type, i),
|
||
|
- xstrdup (TYPE_FIELD_STATIC_PHYSNAME (type,
|
||
|
- i)));
|
||
|
- else
|
||
|
+ switch (TYPE_FIELD_LOC_KIND (type, i))
|
||
|
{
|
||
|
- TYPE_FIELD_BITPOS (new_type, i) =
|
||
|
- TYPE_FIELD_BITPOS (type, i);
|
||
|
- TYPE_FIELD_STATIC_KIND (new_type, i) = 0;
|
||
|
+ case FIELD_LOC_KIND_BITPOS:
|
||
|
+ SET_FIELD_BITPOS (TYPE_FIELD (new_type, i),
|
||
|
+ TYPE_FIELD_BITPOS (type, i));
|
||
|
+ break;
|
||
|
+ case FIELD_LOC_KIND_PHYSADDR:
|
||
|
+ SET_FIELD_PHYSADDR (TYPE_FIELD (new_type, i),
|
||
|
+ TYPE_FIELD_STATIC_PHYSADDR (type, i));
|
||
|
+ break;
|
||
|
+ case FIELD_LOC_KIND_PHYSNAME:
|
||
|
+ SET_FIELD_PHYSNAME (TYPE_FIELD (new_type, i),
|
||
|
+ xstrdup (TYPE_FIELD_STATIC_PHYSNAME (type,
|
||
|
+ i)));
|
||
|
+ break;
|
||
|
+ default:
|
||
|
+ internal_error (__FILE__, __LINE__,
|
||
|
+ _("Unexpected type field location kind: %d"),
|
||
|
+ TYPE_FIELD_LOC_KIND (type, i));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
--- ./gdb/gdbtypes.h 2008-10-29 10:56:05.000000000 +0100
|
||
|
+++ ./gdb/gdbtypes.h 2008-10-29 20:56:57.000000000 +0100
|
||
|
@@ -310,6 +310,16 @@ enum type_code
|
||
|
#define TYPE_FLAG_NOTTEXT (1 << 17)
|
||
|
#define TYPE_NOTTEXT(t) (TYPE_FLAGS (t) & TYPE_FLAG_NOTTEXT)
|
||
|
|
||
|
+/* Determine which field of the union main_type.fields[x].loc is used. */
|
||
|
+
|
||
|
+enum field_loc_kind
|
||
|
+ {
|
||
|
+ FIELD_LOC_KIND_BITPOS, /* bitpos */
|
||
|
+ FIELD_LOC_KIND_PHYSADDR, /* physaddr */
|
||
|
+ FIELD_LOC_KIND_PHYSNAME, /* physname */
|
||
|
+ FIELD_LOC_KIND_DWARF_BLOCK /* dwarf_block */
|
||
|
+ };
|
||
|
+
|
||
|
/* This structure is space-critical.
|
||
|
Its layout has been tweaked to reduce the space used. */
|
||
|
|
||
|
@@ -415,6 +425,12 @@ struct main_type
|
||
|
|
||
|
CORE_ADDR physaddr;
|
||
|
char *physname;
|
||
|
+
|
||
|
+ /* The field location can be computed by evaluating the following DWARF
|
||
|
+ block. This can be used in Fortran variable-length arrays, for
|
||
|
+ instance. */
|
||
|
+
|
||
|
+ struct dwarf2_locexpr_baton *dwarf_block;
|
||
|
}
|
||
|
loc;
|
||
|
|
||
|
@@ -424,11 +440,8 @@ struct main_type
|
||
|
defined. */
|
||
|
unsigned int artificial : 1;
|
||
|
|
||
|
- /* This flag is zero for non-static fields, 1 for fields whose location
|
||
|
- is specified by the label loc.physname, and 2 for fields whose location
|
||
|
- is specified by loc.physaddr. */
|
||
|
-
|
||
|
- unsigned int static_kind : 2;
|
||
|
+ /* Discriminant for union field_location. */
|
||
|
+ ENUM_BITFIELD(field_loc_kind) loc_kind : 2;
|
||
|
|
||
|
/* Size of this field, in bits, or zero if not packed.
|
||
|
For an unpacked field, the field's type's length
|
||
|
@@ -824,20 +837,34 @@ extern void allocate_cplus_struct_type (
|
||
|
|
||
|
#define FIELD_TYPE(thisfld) ((thisfld).type)
|
||
|
#define FIELD_NAME(thisfld) ((thisfld).name)
|
||
|
+#define FIELD_LOC_KIND(thisfld) ((thisfld).loc_kind)
|
||
|
#define FIELD_BITPOS(thisfld) ((thisfld).loc.bitpos)
|
||
|
+#define FIELD_STATIC_PHYSNAME(thisfld) ((thisfld).loc.physname)
|
||
|
+#define FIELD_STATIC_PHYSADDR(thisfld) ((thisfld).loc.physaddr)
|
||
|
+#define FIELD_DWARF_BLOCK(thisfld) ((thisfld).loc.dwarf_block)
|
||
|
+#define SET_FIELD_BITPOS(thisfld, bitpos) \
|
||
|
+ (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_BITPOS, \
|
||
|
+ FIELD_BITPOS (thisfld) = (bitpos))
|
||
|
+#define SET_FIELD_PHYSNAME(thisfld, name) \
|
||
|
+ (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSNAME, \
|
||
|
+ FIELD_STATIC_PHYSNAME (thisfld) = (name))
|
||
|
+#define SET_FIELD_PHYSADDR(thisfld, addr) \
|
||
|
+ (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSADDR, \
|
||
|
+ FIELD_STATIC_PHYSADDR (thisfld) = (addr))
|
||
|
+#define SET_FIELD_DWARF_BLOCK(thisfld, addr) \
|
||
|
+ (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_DWARF_BLOCK, \
|
||
|
+ FIELD_DWARF_BLOCK (thisfld) = (addr))
|
||
|
#define FIELD_ARTIFICIAL(thisfld) ((thisfld).artificial)
|
||
|
#define FIELD_BITSIZE(thisfld) ((thisfld).bitsize)
|
||
|
-#define FIELD_STATIC_KIND(thisfld) ((thisfld).static_kind)
|
||
|
-#define FIELD_PHYSNAME(thisfld) ((thisfld).loc.physname)
|
||
|
-#define FIELD_PHYSADDR(thisfld) ((thisfld).loc.physaddr)
|
||
|
-#define SET_FIELD_PHYSNAME(thisfld, name) \
|
||
|
- ((thisfld).static_kind = 1, FIELD_PHYSNAME(thisfld) = (name))
|
||
|
-#define SET_FIELD_PHYSADDR(thisfld, name) \
|
||
|
- ((thisfld).static_kind = 2, FIELD_PHYSADDR(thisfld) = (name))
|
||
|
+
|
||
|
#define TYPE_FIELD(thistype, n) TYPE_MAIN_TYPE(thistype)->fields[n]
|
||
|
#define TYPE_FIELD_TYPE(thistype, n) FIELD_TYPE(TYPE_FIELD(thistype, n))
|
||
|
#define TYPE_FIELD_NAME(thistype, n) FIELD_NAME(TYPE_FIELD(thistype, n))
|
||
|
-#define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS(TYPE_FIELD(thistype,n))
|
||
|
+#define TYPE_FIELD_LOC_KIND(thistype, n) FIELD_LOC_KIND (TYPE_FIELD (thistype, n))
|
||
|
+#define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS (TYPE_FIELD (thistype, n))
|
||
|
+#define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_STATIC_PHYSNAME (TYPE_FIELD (thistype, n))
|
||
|
+#define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_STATIC_PHYSADDR (TYPE_FIELD (thistype, n))
|
||
|
+#define TYPE_FIELD_DWARF_BLOCK(thistype, n) FIELD_DWARF_BLOCK (TYPE_FIELD (thistype, n))
|
||
|
#define TYPE_FIELD_ARTIFICIAL(thistype, n) FIELD_ARTIFICIAL(TYPE_FIELD(thistype,n))
|
||
|
#define TYPE_FIELD_BITSIZE(thistype, n) FIELD_BITSIZE(TYPE_FIELD(thistype,n))
|
||
|
#define TYPE_FIELD_PACKED(thistype, n) (FIELD_BITSIZE(TYPE_FIELD(thistype,n))!=0)
|
||
|
@@ -873,12 +900,6 @@ extern void allocate_cplus_struct_type (
|
||
|
(TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits == NULL ? 0 \
|
||
|
: B_TST(TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits, (n)))
|
||
|
|
||
|
-#define TYPE_FIELD_STATIC(thistype, n) (TYPE_MAIN_TYPE (thistype)->fields[n].static_kind != 0)
|
||
|
-#define TYPE_FIELD_STATIC_KIND(thistype, n) TYPE_MAIN_TYPE (thistype)->fields[n].static_kind
|
||
|
-#define TYPE_FIELD_STATIC_HAS_ADDR(thistype, n) (TYPE_MAIN_TYPE (thistype)->fields[n].static_kind == 2)
|
||
|
-#define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_PHYSNAME(TYPE_FIELD(thistype, n))
|
||
|
-#define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_PHYSADDR(TYPE_FIELD(thistype, n))
|
||
|
-
|
||
|
#define TYPE_FN_FIELDLISTS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->fn_fieldlists
|
||
|
#define TYPE_FN_FIELDLIST(thistype, n) TYPE_CPLUS_SPECIFIC(thistype)->fn_fieldlists[n]
|
||
|
#define TYPE_FN_FIELDLIST1(thistype, n) TYPE_CPLUS_SPECIFIC(thistype)->fn_fieldlists[n].fn_fields
|
||
|
@@ -1331,6 +1352,8 @@ extern int rank_one_type (struct type *,
|
||
|
|
||
|
extern void recursive_dump_type (struct type *, int);
|
||
|
|
||
|
+extern int field_is_static (struct field *);
|
||
|
+
|
||
|
/* printcmd.c */
|
||
|
|
||
|
extern void print_scalar_formatted (const void *, struct type *, int, int,
|
||
|
--- ./gdb/jv-typeprint.c 2008-01-01 23:53:11.000000000 +0100
|
||
|
+++ ./gdb/jv-typeprint.c 2008-10-29 20:56:57.000000000 +0100
|
||
|
@@ -185,7 +185,7 @@ java_type_print_base (struct type *type,
|
||
|
fprintf_filtered (stream, "public ");
|
||
|
}
|
||
|
|
||
|
- if (TYPE_FIELD_STATIC (type, i))
|
||
|
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
||
|
fprintf_filtered (stream, "static ");
|
||
|
|
||
|
java_print_type (TYPE_FIELD_TYPE (type, i),
|
||
|
--- ./gdb/jv-valprint.c 2008-01-01 23:53:11.000000000 +0100
|
||
|
+++ ./gdb/jv-valprint.c 2008-10-29 20:56:57.000000000 +0100
|
||
|
@@ -302,7 +302,7 @@ java_print_value_fields (struct type *ty
|
||
|
for (i = n_baseclasses; i < len; i++)
|
||
|
{
|
||
|
/* If requested, skip printing of static fields. */
|
||
|
- if (TYPE_FIELD_STATIC (type, i))
|
||
|
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
||
|
{
|
||
|
char *name = TYPE_FIELD_NAME (type, i);
|
||
|
if (!static_field_print)
|
||
|
@@ -340,7 +340,7 @@ java_print_value_fields (struct type *ty
|
||
|
fputs_filtered ("\"( ptr \"", stream);
|
||
|
else
|
||
|
fputs_filtered ("\"( nodef \"", stream);
|
||
|
- if (TYPE_FIELD_STATIC (type, i))
|
||
|
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
||
|
fputs_filtered ("static ", stream);
|
||
|
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
|
||
|
language_cplus,
|
||
|
@@ -355,7 +355,7 @@ java_print_value_fields (struct type *ty
|
||
|
{
|
||
|
annotate_field_begin (TYPE_FIELD_TYPE (type, i));
|
||
|
|
||
|
- if (TYPE_FIELD_STATIC (type, i))
|
||
|
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
||
|
fputs_filtered ("static ", stream);
|
||
|
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
|
||
|
language_cplus,
|
||
|
@@ -365,7 +365,8 @@ java_print_value_fields (struct type *ty
|
||
|
annotate_field_value ();
|
||
|
}
|
||
|
|
||
|
- if (!TYPE_FIELD_STATIC (type, i) && TYPE_FIELD_PACKED (type, i))
|
||
|
+ if (!field_is_static (&TYPE_FIELD (type, i))
|
||
|
+ && TYPE_FIELD_PACKED (type, i))
|
||
|
{
|
||
|
struct value *v;
|
||
|
|
||
|
@@ -389,7 +390,7 @@ java_print_value_fields (struct type *ty
|
||
|
{
|
||
|
fputs_filtered ("<optimized out or zero length>", stream);
|
||
|
}
|
||
|
- else if (TYPE_FIELD_STATIC (type, i))
|
||
|
+ else if (field_is_static (&TYPE_FIELD (type, i)))
|
||
|
{
|
||
|
struct value *v = value_static_field (type, i);
|
||
|
if (v == NULL)
|
||
|
--- ./gdb/mdebugread.c 2008-01-01 23:53:12.000000000 +0100
|
||
|
+++ ./gdb/mdebugread.c 2008-10-29 20:56:57.000000000 +0100
|
||
|
@@ -1053,11 +1053,10 @@ parse_symbol (SYMR *sh, union aux_ext *a
|
||
|
if (tsym.st != stMember)
|
||
|
break;
|
||
|
|
||
|
- FIELD_BITPOS (*f) = tsym.value;
|
||
|
+ SET_FIELD_BITPOS (*f, tsym.value);
|
||
|
FIELD_TYPE (*f) = t;
|
||
|
FIELD_NAME (*f) = debug_info->ss + cur_fdr->issBase + tsym.iss;
|
||
|
FIELD_BITSIZE (*f) = 0;
|
||
|
- FIELD_STATIC_KIND (*f) = 0;
|
||
|
|
||
|
enum_sym = ((struct symbol *)
|
||
|
obstack_alloc (¤t_objfile->objfile_obstack,
|
||
|
@@ -1247,11 +1246,10 @@ parse_symbol (SYMR *sh, union aux_ext *a
|
||
|
case stMember: /* member of struct or union */
|
||
|
f = &TYPE_FIELDS (top_stack->cur_type)[top_stack->cur_field++];
|
||
|
FIELD_NAME (*f) = name;
|
||
|
- FIELD_BITPOS (*f) = sh->value;
|
||
|
+ SET_FIELD_BITPOS (*f, sh->value);
|
||
|
bitsize = 0;
|
||
|
FIELD_TYPE (*f) = parse_type (cur_fd, ax, sh->index, &bitsize, bigend, name);
|
||
|
FIELD_BITSIZE (*f) = bitsize;
|
||
|
- FIELD_STATIC_KIND (*f) = 0;
|
||
|
break;
|
||
|
|
||
|
case stIndirect: /* forward declaration on Irix5 */
|
||
|
--- ./gdb/p-typeprint.c 2008-10-29 10:55:12.000000000 +0100
|
||
|
+++ ./gdb/p-typeprint.c 2008-10-29 20:56:57.000000000 +0100
|
||
|
@@ -575,14 +575,12 @@ pascal_type_print_base (struct type *typ
|
||
|
}
|
||
|
|
||
|
print_spaces_filtered (level + 4, stream);
|
||
|
- if (TYPE_FIELD_STATIC (type, i))
|
||
|
- {
|
||
|
- fprintf_filtered (stream, "static ");
|
||
|
- }
|
||
|
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
||
|
+ fprintf_filtered (stream, "static ");
|
||
|
pascal_print_type (TYPE_FIELD_TYPE (type, i),
|
||
|
TYPE_FIELD_NAME (type, i),
|
||
|
stream, show - 1, level + 4);
|
||
|
- if (!TYPE_FIELD_STATIC (type, i)
|
||
|
+ if (!field_is_static (&TYPE_FIELD (type, i))
|
||
|
&& TYPE_FIELD_PACKED (type, i))
|
||
|
{
|
||
|
/* It is a bitfield. This code does not attempt
|
||
|
--- ./gdb/p-valprint.c 2008-01-01 23:53:12.000000000 +0100
|
||
|
+++ ./gdb/p-valprint.c 2008-10-29 20:56:57.000000000 +0100
|
||
|
@@ -671,7 +671,8 @@ pascal_object_print_value_fields (struct
|
||
|
for (i = n_baseclasses; i < len; i++)
|
||
|
{
|
||
|
/* If requested, skip printing of static fields. */
|
||
|
- if (!pascal_static_field_print && TYPE_FIELD_STATIC (type, i))
|
||
|
+ if (!pascal_static_field_print
|
||
|
+ && field_is_static (&TYPE_FIELD (type, i)))
|
||
|
continue;
|
||
|
if (fields_seen)
|
||
|
fprintf_filtered (stream, ", ");
|
||
|
@@ -703,7 +704,7 @@ pascal_object_print_value_fields (struct
|
||
|
fputs_filtered ("\"( ptr \"", stream);
|
||
|
else
|
||
|
fputs_filtered ("\"( nodef \"", stream);
|
||
|
- if (TYPE_FIELD_STATIC (type, i))
|
||
|
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
||
|
fputs_filtered ("static ", stream);
|
||
|
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
|
||
|
language_cplus,
|
||
|
@@ -718,7 +719,7 @@ pascal_object_print_value_fields (struct
|
||
|
{
|
||
|
annotate_field_begin (TYPE_FIELD_TYPE (type, i));
|
||
|
|
||
|
- if (TYPE_FIELD_STATIC (type, i))
|
||
|
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
||
|
fputs_filtered ("static ", stream);
|
||
|
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
|
||
|
language_cplus,
|
||
|
@@ -728,7 +729,8 @@ pascal_object_print_value_fields (struct
|
||
|
annotate_field_value ();
|
||
|
}
|
||
|
|
||
|
- if (!TYPE_FIELD_STATIC (type, i) && TYPE_FIELD_PACKED (type, i))
|
||
|
+ if (!field_is_static (&TYPE_FIELD (type, i))
|
||
|
+ && TYPE_FIELD_PACKED (type, i))
|
||
|
{
|
||
|
struct value *v;
|
||
|
|
||
|
@@ -752,7 +754,7 @@ pascal_object_print_value_fields (struct
|
||
|
{
|
||
|
fputs_filtered ("<optimized out or zero length>", stream);
|
||
|
}
|
||
|
- else if (TYPE_FIELD_STATIC (type, i))
|
||
|
+ else if (field_is_static (&TYPE_FIELD (type, i)))
|
||
|
{
|
||
|
/* struct value *v = value_static_field (type, i); v4.17 specific */
|
||
|
struct value *v;
|
||
|
--- ./gdb/valops.c 2008-10-29 10:55:12.000000000 +0100
|
||
|
+++ ./gdb/valops.c 2008-10-29 20:56:57.000000000 +0100
|
||
|
@@ -1269,7 +1269,7 @@ search_struct_field (char *name, struct
|
||
|
if (t_field_name && (strcmp_iw (t_field_name, name) == 0))
|
||
|
{
|
||
|
struct value *v;
|
||
|
- if (TYPE_FIELD_STATIC (type, i))
|
||
|
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
||
|
{
|
||
|
v = value_static_field (type, i);
|
||
|
if (v == 0)
|
||
|
@@ -2382,7 +2382,7 @@ value_struct_elt_for_reference (struct t
|
||
|
|
||
|
if (t_field_name && strcmp (t_field_name, name) == 0)
|
||
|
{
|
||
|
- if (TYPE_FIELD_STATIC (t, i))
|
||
|
+ if (field_is_static (&TYPE_FIELD (t, i)))
|
||
|
{
|
||
|
v = value_static_field (t, i);
|
||
|
if (v == NULL)
|
||
|
--- ./gdb/value.c 2008-10-29 10:47:18.000000000 +0100
|
||
|
+++ ./gdb/value.c 2008-10-29 20:56:57.000000000 +0100
|
||
|
@@ -1261,7 +1261,7 @@ value_static_field (struct type *type, i
|
||
|
{
|
||
|
struct value *retval;
|
||
|
|
||
|
- if (TYPE_FIELD_STATIC_HAS_ADDR (type, fieldno))
|
||
|
+ if (TYPE_FIELD_LOC_KIND (type, fieldno) == FIELD_LOC_KIND_PHYSADDR)
|
||
|
{
|
||
|
retval = value_at (TYPE_FIELD_TYPE (type, fieldno),
|
||
|
TYPE_FIELD_STATIC_PHYSADDR (type, fieldno));
|
||
|
--- ./gdb/varobj.c 2008-10-29 10:55:12.000000000 +0100
|
||
|
+++ ./gdb/varobj.c 2008-10-29 20:56:57.000000000 +0100
|
||
|
@@ -2050,7 +2050,7 @@ value_struct_element_index (struct value
|
||
|
|
||
|
TRY_CATCH (e, RETURN_MASK_ERROR)
|
||
|
{
|
||
|
- if (TYPE_FIELD_STATIC (type, type_index))
|
||
|
+ if (field_is_static (&TYPE_FIELD (type, type_index)))
|
||
|
result = value_static_field (type, type_index);
|
||
|
else
|
||
|
result = value_primitive_field (value, 0, type_index, type);
|