forked from Imagelibrary/binutils-gdb
Remove obsolete TYPE_FLAG_... values
Now that init_type no longer takes a FLAGS argument, there is no user of the TYPE_FLAGS_... enum values left. This commit removes them (and all references to them in comments as well). This is mostly a no-op, except for a change to the Python type printer, which attempted to use them before. (As best as I can tell, this wasn't really needed anyway, since it was only used to pretty-print type *instance* flags, which only use the instance flags.) gdb/ChangeLog: * gdbtypes.h (enum type_flag_value): Remove. Remove references to TYPE_FLAG_... in comments throughout. * gdbtypes.c (recursive_dump_type): Do not print TYPE_FLAG_... flags, print the corresponding TYPE_... access macro names. Remove references to TYPE_FLAG_... in comments throughout. * infcall.c: Remove references to TYPE_FLAG_... in comments. * valprint.c: Likewise. * gdb-gdb.py (class TypeFlag): No longer consider TYPE_FLAG_... values, only TYPE_INSTANCE_FLAG_... values. (class TypeFlagsPrinter): Likewise. gdb/testsuite/ChangeLog: * gdb.cp/hang.exp: Remove reference to TYPE_FLAG_STUB in comment. Signed-off-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
This commit is contained in:
@@ -1,3 +1,16 @@
|
|||||||
|
2016-09-05 Ulrich Weigand <uweigand@de.ibm.com>
|
||||||
|
|
||||||
|
* gdbtypes.h (enum type_flag_value): Remove.
|
||||||
|
Remove references to TYPE_FLAG_... in comments throughout.
|
||||||
|
* gdbtypes.c (recursive_dump_type): Do not print TYPE_FLAG_...
|
||||||
|
flags, print the corresponding TYPE_... access macro names.
|
||||||
|
Remove references to TYPE_FLAG_... in comments throughout.
|
||||||
|
* infcall.c: Remove references to TYPE_FLAG_... in comments.
|
||||||
|
* valprint.c: Likewise.
|
||||||
|
* gdb-gdb.py (class TypeFlag): No longer consider TYPE_FLAG_...
|
||||||
|
values, only TYPE_INSTANCE_FLAG_... values.
|
||||||
|
(class TypeFlagsPrinter): Likewise.
|
||||||
|
|
||||||
2016-09-05 Ulrich Weigand <uweigand@de.ibm.com>
|
2016-09-05 Ulrich Weigand <uweigand@de.ibm.com>
|
||||||
|
|
||||||
* gdbtypes.h (init_type): Remove FLAGS argument. Move OBJFILE
|
* gdbtypes.h (init_type): Remove FLAGS argument. Move OBJFILE
|
||||||
|
|||||||
@@ -24,29 +24,26 @@ class TypeFlag:
|
|||||||
|
|
||||||
In the GDB sources, struct type has a component called instance_flags
|
In the GDB sources, struct type has a component called instance_flags
|
||||||
in which the value is the addition of various flags. These flags are
|
in which the value is the addition of various flags. These flags are
|
||||||
defined by two enumerates: type_flag_value, and type_instance_flag_value.
|
defined by the enumerates type_instance_flag_value. This class helps us
|
||||||
This class helps us recreate a list with all these flags that is
|
recreate a list with all these flags that is easy to manipulate and sort.
|
||||||
easy to manipulate and sort. Because all flag names start with either
|
Because all flag names start with TYPE_INSTANCE_FLAG_, a short_name
|
||||||
TYPE_FLAG_ or TYPE_INSTANCE_FLAG_, a short_name attribute is provided
|
attribute is provided that strips this prefix.
|
||||||
that strips this prefix.
|
|
||||||
|
|
||||||
ATTRIBUTES
|
ATTRIBUTES
|
||||||
name: The enumeration name (eg: "TYPE_FLAG_UNSIGNED").
|
name: The enumeration name (eg: "TYPE_INSTANCE_FLAG_CONST").
|
||||||
value: The associated value.
|
value: The associated value.
|
||||||
short_name: The enumeration name, with the suffix stripped.
|
short_name: The enumeration name, with the suffix stripped.
|
||||||
"""
|
"""
|
||||||
def __init__(self, name, value):
|
def __init__(self, name, value):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.value = value
|
self.value = value
|
||||||
self.short_name = name.replace("TYPE_FLAG_", '')
|
|
||||||
if self.short_name == name:
|
|
||||||
self.short_name = name.replace("TYPE_INSTANCE_FLAG_", '')
|
self.short_name = name.replace("TYPE_INSTANCE_FLAG_", '')
|
||||||
def __cmp__(self, other):
|
def __cmp__(self, other):
|
||||||
"""Sort by value order."""
|
"""Sort by value order."""
|
||||||
return self.value.__cmp__(other.value)
|
return self.value.__cmp__(other.value)
|
||||||
|
|
||||||
# A list of all existing TYPE_FLAGS_* and TYPE_INSTANCE_FLAGS_*
|
# A list of all existing TYPE_INSTANCE_FLAGS_* enumerations,
|
||||||
# enumerations, stored as TypeFlags objects. Lazy-initialized.
|
# stored as TypeFlags objects. Lazy-initialized.
|
||||||
TYPE_FLAGS = None
|
TYPE_FLAGS = None
|
||||||
|
|
||||||
class TypeFlagsPrinter:
|
class TypeFlagsPrinter:
|
||||||
@@ -85,24 +82,13 @@ class TypeFlagsPrinter:
|
|||||||
"""
|
"""
|
||||||
global TYPE_FLAGS
|
global TYPE_FLAGS
|
||||||
TYPE_FLAGS = []
|
TYPE_FLAGS = []
|
||||||
try:
|
|
||||||
flags = gdb.lookup_type("enum type_flag_value")
|
|
||||||
except:
|
|
||||||
print("Warning: Cannot find enum type_flag_value type.")
|
|
||||||
print(" `struct type' pretty-printer will be degraded")
|
|
||||||
return
|
|
||||||
try:
|
try:
|
||||||
iflags = gdb.lookup_type("enum type_instance_flag_value")
|
iflags = gdb.lookup_type("enum type_instance_flag_value")
|
||||||
except:
|
except:
|
||||||
print("Warning: Cannot find enum type_instance_flag_value type.")
|
print("Warning: Cannot find enum type_instance_flag_value type.")
|
||||||
print(" `struct type' pretty-printer will be degraded")
|
print(" `struct type' pretty-printer will be degraded")
|
||||||
return
|
return
|
||||||
# Note: TYPE_FLAG_MIN is a duplicate of TYPE_FLAG_UNSIGNED,
|
|
||||||
# so exclude it from the list we are building.
|
|
||||||
TYPE_FLAGS = [TypeFlag(field.name, field.enumval)
|
TYPE_FLAGS = [TypeFlag(field.name, field.enumval)
|
||||||
for field in flags.fields()
|
|
||||||
if field.name != 'TYPE_FLAG_MIN']
|
|
||||||
TYPE_FLAGS += [TypeFlag(field.name, field.enumval)
|
|
||||||
for field in iflags.fields()]
|
for field in iflags.fields()]
|
||||||
TYPE_FLAGS.sort()
|
TYPE_FLAGS.sort()
|
||||||
|
|
||||||
|
|||||||
@@ -1119,7 +1119,7 @@ create_array_type_with_stride (struct type *result_type,
|
|||||||
if (bit_stride > 0)
|
if (bit_stride > 0)
|
||||||
TYPE_FIELD_BITSIZE (result_type, 0) = bit_stride;
|
TYPE_FIELD_BITSIZE (result_type, 0) = bit_stride;
|
||||||
|
|
||||||
/* TYPE_FLAG_TARGET_STUB will take care of zero length arrays. */
|
/* TYPE_TARGET_STUB will take care of zero length arrays. */
|
||||||
if (TYPE_LENGTH (result_type) == 0)
|
if (TYPE_LENGTH (result_type) == 0)
|
||||||
TYPE_TARGET_STUB (result_type) = 1;
|
TYPE_TARGET_STUB (result_type) = 1;
|
||||||
|
|
||||||
@@ -4325,77 +4325,77 @@ recursive_dump_type (struct type *type, int spaces)
|
|||||||
TYPE_INSTANCE_FLAGS (type));
|
TYPE_INSTANCE_FLAGS (type));
|
||||||
if (TYPE_CONST (type))
|
if (TYPE_CONST (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_CONST");
|
puts_filtered (" TYPE_CONST");
|
||||||
}
|
}
|
||||||
if (TYPE_VOLATILE (type))
|
if (TYPE_VOLATILE (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_VOLATILE");
|
puts_filtered (" TYPE_VOLATILE");
|
||||||
}
|
}
|
||||||
if (TYPE_CODE_SPACE (type))
|
if (TYPE_CODE_SPACE (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_CODE_SPACE");
|
puts_filtered (" TYPE_CODE_SPACE");
|
||||||
}
|
}
|
||||||
if (TYPE_DATA_SPACE (type))
|
if (TYPE_DATA_SPACE (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_DATA_SPACE");
|
puts_filtered (" TYPE_DATA_SPACE");
|
||||||
}
|
}
|
||||||
if (TYPE_ADDRESS_CLASS_1 (type))
|
if (TYPE_ADDRESS_CLASS_1 (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_ADDRESS_CLASS_1");
|
puts_filtered (" TYPE_ADDRESS_CLASS_1");
|
||||||
}
|
}
|
||||||
if (TYPE_ADDRESS_CLASS_2 (type))
|
if (TYPE_ADDRESS_CLASS_2 (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_ADDRESS_CLASS_2");
|
puts_filtered (" TYPE_ADDRESS_CLASS_2");
|
||||||
}
|
}
|
||||||
if (TYPE_RESTRICT (type))
|
if (TYPE_RESTRICT (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_RESTRICT");
|
puts_filtered (" TYPE_RESTRICT");
|
||||||
}
|
}
|
||||||
if (TYPE_ATOMIC (type))
|
if (TYPE_ATOMIC (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_ATOMIC");
|
puts_filtered (" TYPE_ATOMIC");
|
||||||
}
|
}
|
||||||
puts_filtered ("\n");
|
puts_filtered ("\n");
|
||||||
|
|
||||||
printfi_filtered (spaces, "flags");
|
printfi_filtered (spaces, "flags");
|
||||||
if (TYPE_UNSIGNED (type))
|
if (TYPE_UNSIGNED (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_UNSIGNED");
|
puts_filtered (" TYPE_UNSIGNED");
|
||||||
}
|
}
|
||||||
if (TYPE_NOSIGN (type))
|
if (TYPE_NOSIGN (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_NOSIGN");
|
puts_filtered (" TYPE_NOSIGN");
|
||||||
}
|
}
|
||||||
if (TYPE_STUB (type))
|
if (TYPE_STUB (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_STUB");
|
puts_filtered (" TYPE_STUB");
|
||||||
}
|
}
|
||||||
if (TYPE_TARGET_STUB (type))
|
if (TYPE_TARGET_STUB (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_TARGET_STUB");
|
puts_filtered (" TYPE_TARGET_STUB");
|
||||||
}
|
}
|
||||||
if (TYPE_STATIC (type))
|
if (TYPE_STATIC (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_STATIC");
|
puts_filtered (" TYPE_STATIC");
|
||||||
}
|
}
|
||||||
if (TYPE_PROTOTYPED (type))
|
if (TYPE_PROTOTYPED (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_PROTOTYPED");
|
puts_filtered (" TYPE_PROTOTYPED");
|
||||||
}
|
}
|
||||||
if (TYPE_INCOMPLETE (type))
|
if (TYPE_INCOMPLETE (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_INCOMPLETE");
|
puts_filtered (" TYPE_INCOMPLETE");
|
||||||
}
|
}
|
||||||
if (TYPE_VARARGS (type))
|
if (TYPE_VARARGS (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_VARARGS");
|
puts_filtered (" TYPE_VARARGS");
|
||||||
}
|
}
|
||||||
/* This is used for things like AltiVec registers on ppc. Gcc emits
|
/* This is used for things like AltiVec registers on ppc. Gcc emits
|
||||||
an attribute for the array type, which tells whether or not we
|
an attribute for the array type, which tells whether or not we
|
||||||
have a vector, instead of a regular array. */
|
have a vector, instead of a regular array. */
|
||||||
if (TYPE_VECTOR (type))
|
if (TYPE_VECTOR (type))
|
||||||
{
|
{
|
||||||
puts_filtered (" TYPE_FLAG_VECTOR");
|
puts_filtered (" TYPE_VECTOR");
|
||||||
}
|
}
|
||||||
if (TYPE_FIXED_INSTANCE (type))
|
if (TYPE_FIXED_INSTANCE (type))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -184,35 +184,8 @@ enum type_code
|
|||||||
TYPE_CODE_XMETHOD
|
TYPE_CODE_XMETHOD
|
||||||
};
|
};
|
||||||
|
|
||||||
/* * Some constants representing each bit field in the main_type. See
|
|
||||||
the bit-field-specific macros, below, for documentation of each
|
|
||||||
constant in this enum. These enum values are only used with
|
|
||||||
init_type. Note that the values are chosen not to conflict with
|
|
||||||
type_instance_flag_value; this lets init_type error-check its
|
|
||||||
input. */
|
|
||||||
|
|
||||||
enum type_flag_value
|
|
||||||
{
|
|
||||||
TYPE_FLAG_UNSIGNED = (1 << 9),
|
|
||||||
TYPE_FLAG_NOSIGN = (1 << 10),
|
|
||||||
TYPE_FLAG_STUB = (1 << 11),
|
|
||||||
TYPE_FLAG_TARGET_STUB = (1 << 12),
|
|
||||||
TYPE_FLAG_STATIC = (1 << 13),
|
|
||||||
TYPE_FLAG_PROTOTYPED = (1 << 14),
|
|
||||||
TYPE_FLAG_INCOMPLETE = (1 << 15),
|
|
||||||
TYPE_FLAG_VARARGS = (1 << 16),
|
|
||||||
TYPE_FLAG_VECTOR = (1 << 17),
|
|
||||||
TYPE_FLAG_FIXED_INSTANCE = (1 << 18),
|
|
||||||
TYPE_FLAG_STUB_SUPPORTED = (1 << 19),
|
|
||||||
TYPE_FLAG_GNU_IFUNC = (1 << 20),
|
|
||||||
|
|
||||||
/* * Used for error-checking. */
|
|
||||||
TYPE_FLAG_MIN = TYPE_FLAG_UNSIGNED
|
|
||||||
};
|
|
||||||
|
|
||||||
/* * Some bits for the type's instance_flags word. See the macros
|
/* * Some bits for the type's instance_flags word. See the macros
|
||||||
below for documentation on each bit. Note that if you add a value
|
below for documentation on each bit. */
|
||||||
here, you must update the enum type_flag_value as well. */
|
|
||||||
|
|
||||||
enum type_instance_flag_value
|
enum type_instance_flag_value
|
||||||
{
|
{
|
||||||
@@ -228,7 +201,7 @@ enum type_instance_flag_value
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* * Unsigned integer type. If this is not set for a TYPE_CODE_INT,
|
/* * Unsigned integer type. If this is not set for a TYPE_CODE_INT,
|
||||||
the type is signed (unless TYPE_FLAG_NOSIGN (below) is set). */
|
the type is signed (unless TYPE_NOSIGN (below) is set). */
|
||||||
|
|
||||||
#define TYPE_UNSIGNED(t) (TYPE_MAIN_TYPE (t)->flag_unsigned)
|
#define TYPE_UNSIGNED(t) (TYPE_MAIN_TYPE (t)->flag_unsigned)
|
||||||
|
|
||||||
@@ -370,11 +343,11 @@ enum type_instance_flag_value
|
|||||||
architecture's two (or more) address spaces, but this is an extension
|
architecture's two (or more) address spaces, but this is an extension
|
||||||
of the architecture's model.
|
of the architecture's model.
|
||||||
|
|
||||||
If TYPE_FLAG_INST is set, an object of the corresponding type
|
If TYPE_INSTANCE_FLAG_CODE_SPACE is set, an object of the corresponding type
|
||||||
resides in instruction memory, even if its address (in the extended
|
resides in instruction memory, even if its address (in the extended
|
||||||
flat address space) does not reflect this.
|
flat address space) does not reflect this.
|
||||||
|
|
||||||
Similarly, if TYPE_FLAG_DATA is set, then an object of the
|
Similarly, if TYPE_INSTANCE_FLAG_DATA_SPACE is set, then an object of the
|
||||||
corresponding type resides in the data memory space, even if
|
corresponding type resides in the data memory space, even if
|
||||||
this is not indicated by its (flat address space) address.
|
this is not indicated by its (flat address space) address.
|
||||||
|
|
||||||
@@ -390,7 +363,7 @@ enum type_instance_flag_value
|
|||||||
/* * Address class flags. Some environments provide for pointers
|
/* * Address class flags. Some environments provide for pointers
|
||||||
whose size is different from that of a normal pointer or address
|
whose size is different from that of a normal pointer or address
|
||||||
types where the bits are interpreted differently than normal
|
types where the bits are interpreted differently than normal
|
||||||
addresses. The TYPE_FLAG_ADDRESS_CLASS_n flags may be used in
|
addresses. The TYPE_INSTANCE_FLAG_ADDRESS_CLASS_n flags may be used in
|
||||||
target specific ways to represent these different types of address
|
target specific ways to represent these different types of address
|
||||||
classes. */
|
classes. */
|
||||||
|
|
||||||
@@ -685,7 +658,7 @@ struct main_type
|
|||||||
|
|
||||||
This is used for printing only, except by poorly designed C++ code.
|
This is used for printing only, except by poorly designed C++ code.
|
||||||
For looking up a name, look for a symbol in the STRUCT_DOMAIN.
|
For looking up a name, look for a symbol in the STRUCT_DOMAIN.
|
||||||
One more legitimate use is that if TYPE_FLAG_STUB is set, this is
|
One more legitimate use is that if TYPE_STUB is set, this is
|
||||||
the name to use to look for definitions in other files. */
|
the name to use to look for definitions in other files. */
|
||||||
|
|
||||||
const char *tag_name;
|
const char *tag_name;
|
||||||
|
|||||||
@@ -61,10 +61,9 @@
|
|||||||
|
|
||||||
Unfortunately, on certain older platforms, the debug info doesn't
|
Unfortunately, on certain older platforms, the debug info doesn't
|
||||||
indicate reliably how each function was defined. A function type's
|
indicate reliably how each function was defined. A function type's
|
||||||
TYPE_FLAG_PROTOTYPED flag may be clear, even if the function was
|
TYPE_PROTOTYPED flag may be clear, even if the function was defined
|
||||||
defined in prototype style. When calling a function whose
|
in prototype style. When calling a function whose TYPE_PROTOTYPED
|
||||||
TYPE_FLAG_PROTOTYPED flag is clear, GDB consults this flag to
|
flag is clear, GDB consults this flag to decide what to do.
|
||||||
decide what to do.
|
|
||||||
|
|
||||||
For modern targets, it is proper to assume that, if the prototype
|
For modern targets, it is proper to assume that, if the prototype
|
||||||
flag is clear, that can be trusted: `float' arguments should be
|
flag is clear, that can be trusted: `float' arguments should be
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
2016-09-05 Ulrich Weigand <uweigand@de.ibm.com>
|
||||||
|
|
||||||
|
* gdb.cp/hang.exp: Remove reference to TYPE_FLAG_STUB in comment.
|
||||||
|
|
||||||
2016-09-05 Pedro Alves <palves@redhat.com>
|
2016-09-05 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
PR backtrace/19927
|
PR backtrace/19927
|
||||||
|
|||||||
@@ -58,8 +58,8 @@ if {[prepare_for_testing $testfile.exp $testfile \
|
|||||||
#
|
#
|
||||||
# Since `hang2.o''s psymtab lists `hang1.o' as a dependency, GDB first
|
# Since `hang2.o''s psymtab lists `hang1.o' as a dependency, GDB first
|
||||||
# reads `hang1.o''s symbols. When GDB sees `(1,3)=xsB:', it creates a
|
# reads `hang1.o''s symbols. When GDB sees `(1,3)=xsB:', it creates a
|
||||||
# type object for `struct B', sets its TYPE_FLAG_STUB flag, and
|
# type object for `struct B', sets its TYPE_STUB flag, and records it
|
||||||
# records it as type number `(1,3)'.
|
# as type number `(1,3)'.
|
||||||
#
|
#
|
||||||
# When GDB finds the definition of `struct C::B', since the stabs
|
# When GDB finds the definition of `struct C::B', since the stabs
|
||||||
# don't indicate that the type is nested within C, it treats it as
|
# don't indicate that the type is nested within C, it treats it as
|
||||||
|
|||||||
@@ -999,10 +999,9 @@ generic_val_print (struct type *type, const gdb_byte *valaddr,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TYPE_CODE_UNDEF:
|
case TYPE_CODE_UNDEF:
|
||||||
/* This happens (without TYPE_FLAG_STUB set) on systems which
|
/* This happens (without TYPE_STUB set) on systems which don't use
|
||||||
don't use dbx xrefs (NO_DBX_XREFS in gcc) if a file has a
|
dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
|
||||||
"struct foo *bar" and no complete type for struct foo in that
|
and no complete type for struct foo in that file. */
|
||||||
file. */
|
|
||||||
fprintf_filtered (stream, _("<incomplete type>"));
|
fprintf_filtered (stream, _("<incomplete type>"));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user