mirror of
https://github.com/gcc-mirror/gcc.git
synced 2024-11-21 13:40:47 +00:00
Handle T_HRESULT types in CodeView records
Follow MSVC in having a special type value, T_HRESULT, for (signed) longs that have been typedef'd with the name "HRESULT". This is so that the debugger can display user-friendly constant names when debugging COM code. gcc/ * dwarf2codeview.cc (get_type_num_typedef): New function. (get_type_num): Call get_type_num_typedef. * dwarf2codeview.h (T_HRESULT): Define.
This commit is contained in:
parent
b0f4f556ea
commit
6177b45fcd
@ -6220,6 +6220,29 @@ get_type_num_ptr_to_member_type (dw_die_ref type, bool in_struct)
|
|||||||
return ct->num;
|
return ct->num;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return the type number that corresponds to a DW_TAG_typedef DIE: either the
|
||||||
|
type number of the base type, or follow MSVC in having a special value
|
||||||
|
for the HRESULT used by COM. */
|
||||||
|
|
||||||
|
static uint32_t
|
||||||
|
get_type_num_typedef (dw_die_ref type, bool in_struct)
|
||||||
|
{
|
||||||
|
uint32_t num;
|
||||||
|
|
||||||
|
num = get_type_num (get_AT_ref (type, DW_AT_type), in_struct, false);
|
||||||
|
|
||||||
|
if (num == T_LONG)
|
||||||
|
{
|
||||||
|
const char *name = get_AT_string (type, DW_AT_name);
|
||||||
|
|
||||||
|
/* longs typedef'd as "HRESULT" get their own type */
|
||||||
|
if (name && !strcmp (name, "HRESULT"))
|
||||||
|
num = T_HRESULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
|
||||||
/* Process a DIE representing a type definition, add a CodeView type if
|
/* Process a DIE representing a type definition, add a CodeView type if
|
||||||
necessary, and return its number. If it's something we can't handle, return
|
necessary, and return its number. If it's something we can't handle, return
|
||||||
0. We keep a hash table so that we're not adding the same type multiple
|
0. We keep a hash table so that we're not adding the same type multiple
|
||||||
@ -6254,9 +6277,7 @@ get_type_num (dw_die_ref type, bool in_struct, bool no_fwd_ref)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case DW_TAG_typedef:
|
case DW_TAG_typedef:
|
||||||
/* FIXME - signed longs typedef'd as "HRESULT" should get their
|
num = get_type_num_typedef (type, in_struct);
|
||||||
own type (T_HRESULT) */
|
|
||||||
num = get_type_num (get_AT_ref (type, DW_AT_type), in_struct, false);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DW_TAG_pointer_type:
|
case DW_TAG_pointer_type:
|
||||||
|
@ -26,6 +26,7 @@ along with GCC; see the file COPYING3. If not see
|
|||||||
/* Constants for in-built types. */
|
/* Constants for in-built types. */
|
||||||
|
|
||||||
#define T_VOID 0x0003
|
#define T_VOID 0x0003
|
||||||
|
#define T_HRESULT 0x0008
|
||||||
#define T_CHAR 0x0010
|
#define T_CHAR 0x0010
|
||||||
#define T_SHORT 0x0011
|
#define T_SHORT 0x0011
|
||||||
#define T_LONG 0x0012
|
#define T_LONG 0x0012
|
||||||
|
Loading…
Reference in New Issue
Block a user