projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git]
/
gdb
/
gnu-v2-abi.c
diff --git
a/gdb/gnu-v2-abi.c
b/gdb/gnu-v2-abi.c
index 3d49a06645d1b2245d1f3fde6d985cd03aa4b165..9238f10986d9eb9f69a86bdc99250a60a60ece5f 100644
(file)
--- a/
gdb/gnu-v2-abi.c
+++ b/
gdb/gnu-v2-abi.c
@@
-1,7
+1,6
@@
/* Abstraction of GNU v2 abi.
/* Abstraction of GNU v2 abi.
- Copyright (C) 2001, 2002, 2003, 2005, 2007, 2008, 2009, 2010, 2011
- Free Software Foundation, Inc.
+ Copyright (C) 2001-2020 Free Software Foundation, Inc.
Contributed by Daniel Berlin <dberlin@redhat.com>
Contributed by Daniel Berlin <dberlin@redhat.com>
@@
-21,15
+20,13
@@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
-#include "gdb_string.h"
#include "symtab.h"
#include "gdbtypes.h"
#include "value.h"
#include "demangle.h"
#include "symtab.h"
#include "gdbtypes.h"
#include "value.h"
#include "demangle.h"
+#include "gdb-demangle.h"
#include "cp-abi.h"
#include "cp-support.h"
#include "cp-abi.h"
#include "cp-support.h"
-#include "exceptions.h"
-
#include <ctype.h>
struct cp_abi_ops gnu_v2_abi_ops;
#include <ctype.h>
struct cp_abi_ops gnu_v2_abi_ops;
@@
-40,10
+37,10
@@
static enum dtor_kinds
gnuv2_is_destructor_name (const char *name)
{
if ((name[0] == '_' && is_cplus_marker (name[1]) && name[2] == '_')
gnuv2_is_destructor_name (const char *name)
{
if ((name[0] == '_' && is_cplus_marker (name[1]) && name[2] == '_')
- || st
rncmp (name, "__dt__", 6) == 0
)
+ || st
artswith (name, "__dt__")
)
return complete_object_dtor;
else
return complete_object_dtor;
else
- return 0;
+ return
(enum dtor_kinds)
0;
}
static enum ctor_kinds
}
static enum ctor_kinds
@@
-51,10
+48,10
@@
gnuv2_is_constructor_name (const char *name)
{
if ((name[0] == '_' && name[1] == '_'
&& (isdigit (name[2]) || strchr ("Qt", name[2])))
{
if ((name[0] == '_' && name[1] == '_'
&& (isdigit (name[2]) || strchr ("Qt", name[2])))
- || st
rncmp (name, "__ct__", 6) == 0
)
+ || st
artswith (name, "__ct__")
)
return complete_object_ctor;
else
return complete_object_ctor;
else
- return 0;
+ return
(enum ctor_kinds)
0;
}
static int
}
static int
@@
-71,7
+68,7
@@
gnuv2_is_vtable_name (const char *name)
static int
gnuv2_is_operator_name (const char *name)
{
static int
gnuv2_is_operator_name (const char *name)
{
- return st
rncmp (name, "operator", 8) == 0
;
+ return st
artswith (name, CP_OPERATOR_STR)
;
}
\f
}
\f
@@
-135,8
+132,8
@@
gnuv2_virtual_fn_field (struct value **arg1p, struct fn_field * f, int j,
/* With older versions of g++, the vtbl field pointed to an array
of structures. Nowadays it points directly to the structure. */
/* With older versions of g++, the vtbl field pointed to an array
of structures. Nowadays it points directly to the structure. */
- if (
TYPE_CODE (value_type (vtbl)
) == TYPE_CODE_PTR
- && TYPE_
CODE (TYPE_TARGET_TYPE (value_type (vtbl))
) == TYPE_CODE_ARRAY)
+ if (
value_type (vtbl)->code (
) == TYPE_CODE_PTR
+ && TYPE_
TARGET_TYPE (value_type (vtbl))->code (
) == TYPE_CODE_ARRAY)
{
/* Handle the case where the vtbl field points to an
array of structures. */
{
/* Handle the case where the vtbl field points to an
array of structures. */
@@
-158,7
+155,7
@@
gnuv2_virtual_fn_field (struct value **arg1p, struct fn_field * f, int j,
entry_type = check_typedef (value_type (entry));
entry_type = check_typedef (value_type (entry));
- if (
TYPE_CODE (entry_type
) == TYPE_CODE_STRUCT)
+ if (
entry_type->code (
) == TYPE_CODE_STRUCT)
{
/* Move the `this' pointer according to the virtual function table. */
set_value_offset (arg1, value_offset (arg1)
{
/* Move the `this' pointer according to the virtual function table. */
set_value_offset (arg1, value_offset (arg1)
@@
-172,7
+169,7
@@
gnuv2_virtual_fn_field (struct value **arg1p, struct fn_field * f, int j,
vfn = value_field (entry, 2);
}
vfn = value_field (entry, 2);
}
- else if (
TYPE_CODE (entry_type
) == TYPE_CODE_PTR)
+ else if (
entry_type->code (
) == TYPE_CODE_PTR)
vfn = entry;
else
error (_("I'm confused: virtual function table has bad type"));
vfn = entry;
else
error (_("I'm confused: virtual function table has bad type"));
@@
-186,13
+183,14
@@
gnuv2_virtual_fn_field (struct value **arg1p, struct fn_field * f, int j,
static struct type *
static struct type *
-gnuv2_value_rtti_type (struct value *v, int *full,
int
*top, int *using_enc)
+gnuv2_value_rtti_type (struct value *v, int *full,
LONGEST
*top, int *using_enc)
{
struct type *known_type;
struct type *rtti_type;
CORE_ADDR vtbl;
{
struct type *known_type;
struct type *rtti_type;
CORE_ADDR vtbl;
- struct
minimal_symbol *
minsym;
+ struct
bound_minimal_symbol
minsym;
char *demangled_name, *p;
char *demangled_name, *p;
+ const char *linkage_name;
struct type *btype;
struct type *known_type_vptr_basetype;
int known_type_vptr_fieldno;
struct type *btype;
struct type *known_type_vptr_basetype;
int known_type_vptr_fieldno;
@@
-206,9
+204,9
@@
gnuv2_value_rtti_type (struct value *v, int *full, int *top, int *using_enc)
/* Get declared type. */
known_type = value_type (v);
/* Get declared type. */
known_type = value_type (v);
-
CHECK_TYPEDEF
(known_type);
+
known_type = check_typedef
(known_type);
/* RTTI works only or class objects. */
/* RTTI works only or class objects. */
- if (
TYPE_CODE (known_type) != TYPE_CODE_CLASS
)
+ if (
known_type->code () != TYPE_CODE_STRUCT
)
return NULL;
/* Plan on this changing in the future as i get around to setting
return NULL;
/* Plan on this changing in the future as i get around to setting
@@
-227,7
+225,7
@@
gnuv2_value_rtti_type (struct value *v, int *full, int *top, int *using_enc)
/* Make sure our basetype and known type match, otherwise, cast
so we can get at the vtable properly. */
btype = known_type_vptr_basetype;
/* Make sure our basetype and known type match, otherwise, cast
so we can get at the vtable properly. */
btype = known_type_vptr_basetype;
-
CHECK_TYPEDEF
(btype);
+
btype = check_typedef
(btype);
if (btype != known_type )
{
v = value_cast (btype, v);
if (btype != known_type )
{
v = value_cast (btype, v);
@@
-244,13
+242,13
@@
gnuv2_value_rtti_type (struct value *v, int *full, int *top, int *using_enc)
/* Try to find a symbol that is the vtable. */
minsym=lookup_minimal_symbol_by_pc(vtbl);
/* Try to find a symbol that is the vtable. */
minsym=lookup_minimal_symbol_by_pc(vtbl);
- if (minsym==NULL
- || (
demangled_name=SYMBOL_LINKAGE_NAME (minsym
))==NULL
- || !is_vtable_name (
demangled
_name))
+ if (minsym
.minsym
==NULL
+ || (
linkage_name=minsym.minsym->linkage_name (
))==NULL
+ || !is_vtable_name (
linkage
_name))
return NULL;
/* If we just skip the prefix, we get screwed by namespaces. */
return NULL;
/* If we just skip the prefix, we get screwed by namespaces. */
- demangled_name=
cplus_demangle(demangled
_name,DMGL_PARAMS|DMGL_ANSI);
+ demangled_name=
gdb_demangle(linkage
_name,DMGL_PARAMS|DMGL_ANSI);
p = strchr (demangled_name, ' ');
if (p)
*p = '\0';
p = strchr (demangled_name, ' ');
if (p)
*p = '\0';
@@
-296,8
+294,8
@@
static int
vb_match (struct type *type, int index, struct type *basetype)
{
struct type *fieldtype;
vb_match (struct type *type, int index, struct type *basetype)
{
struct type *fieldtype;
- char *name = TYPE_FIELD_NAME (type, index);
- char *field_class_name = NULL;
+ c
onst c
har *name = TYPE_FIELD_NAME (type, index);
+ c
onst c
har *field_class_name = NULL;
if (*name != '_')
return 0;
if (*name != '_')
return 0;
@@
-316,7
+314,7
@@
vb_match (struct type *type, int index, struct type *basetype)
it is for this baseclass. */
fieldtype = TYPE_FIELD_TYPE (type, index);
if (fieldtype == NULL
it is for this baseclass. */
fieldtype = TYPE_FIELD_TYPE (type, index);
if (fieldtype == NULL
- ||
TYPE_CODE (fieldtype
) != TYPE_CODE_PTR)
+ ||
fieldtype->code (
) != TYPE_CODE_PTR)
/* "Can't happen". */
return 0;
/* "Can't happen". */
return 0;
@@
-327,10
+325,10
@@
vb_match (struct type *type, int index, struct type *basetype)
if (TYPE_TARGET_TYPE (fieldtype) == basetype)
return 1;
if (TYPE_TARGET_TYPE (fieldtype) == basetype)
return 1;
- if (
TYPE_NAME (basetype
) != NULL
- && TYPE_
NAME (TYPE_TARGET_TYPE (fieldtype)
) != NULL
- && strcmp (
TYPE_NAME (basetype
),
- TYPE_
NAME (TYPE_TARGET_TYPE (fieldtype)
)) == 0)
+ if (
basetype->name (
) != NULL
+ && TYPE_
TARGET_TYPE (fieldtype)->name (
) != NULL
+ && strcmp (
basetype->name (
),
+ TYPE_
TARGET_TYPE (fieldtype)->name (
)) == 0)
return 1;
return 0;
}
return 1;
return 0;
}
@@
-342,7
+340,7
@@
vb_match (struct type *type, int index, struct type *basetype)
static int
gnuv2_baseclass_offset (struct type *type, int index,
static int
gnuv2_baseclass_offset (struct type *type, int index,
- const bfd_byte *valaddr,
int
embedded_offset,
+ const bfd_byte *valaddr,
LONGEST
embedded_offset,
CORE_ADDR address, const struct value *val)
{
struct type *basetype = TYPE_BASECLASS (type, index);
CORE_ADDR address, const struct value *val)
{
struct type *basetype = TYPE_BASECLASS (type, index);
@@
-350,7
+348,7
@@
gnuv2_baseclass_offset (struct type *type, int index,
if (BASETYPE_VIA_VIRTUAL (type, index))
{
/* Must hunt for the pointer to this virtual baseclass. */
if (BASETYPE_VIA_VIRTUAL (type, index))
{
/* Must hunt for the pointer to this virtual baseclass. */
- int i, len =
TYPE_NFIELDS (type
);
+ int i, len =
type->num_fields (
);
int n_baseclasses = TYPE_N_BASECLASSES (type);
/* First look for the virtual baseclass pointer
int n_baseclasses = TYPE_N_BASECLASSES (type);
/* First look for the virtual baseclass pointer
@@
-360,7
+358,7
@@
gnuv2_baseclass_offset (struct type *type, int index,
if (vb_match (type, i, basetype))
{
struct type *field_type;
if (vb_match (type, i, basetype))
{
struct type *field_type;
-
int
field_offset;
+
LONGEST
field_offset;
int field_length;
CORE_ADDR addr;
int field_length;
CORE_ADDR addr;
@@
-415,12
+413,10
@@
init_gnuv2_ops (void)
gnu_v2_abi_ops.baseclass_offset = gnuv2_baseclass_offset;
}
gnu_v2_abi_ops.baseclass_offset = gnuv2_baseclass_offset;
}
-extern initialize_file_ftype _initialize_gnu_v2_abi; /* -Wmissing-prototypes */
-
+void _initialize_gnu_v2_abi ();
void
void
-_initialize_gnu_v2_abi (
void
)
+_initialize_gnu_v2_abi ()
{
init_gnuv2_ops ();
register_cp_abi (&gnu_v2_abi_ops);
{
init_gnuv2_ops ();
register_cp_abi (&gnu_v2_abi_ops);
- set_cp_abi_as_auto_default (gnu_v2_abi_ops.shortname);
}
}
This page took
0.028021 seconds
and
4
git commands to generate.