Re: RFA: abstract C++ ABI dependencies

David Taylor
2001-04-24T12:27:00Z

From: Jim Blandy <jimb@zwingli.cygnus.com>
Date: Tue, 24 Apr 2001 12:30:19 -0500 (EST)

I'd like approval for these changes from the following people:

- David Taylor (c-typeprint.c, c-valprint.c, eval.c, gdbtypes.c,
typeprint.c, valops.c, value.h, values.c, valops.c)

- Anthony Green (jv-typeprint.c)

cp-abi.h -- includes defs.h and value.h; this is contrary to the value
of the macro definition of cp_abi_h in Makefile.in.

While I dislike having include files include other include files and I
don't wish to reopen that debate, I must ask -- why does cp-abi.h
include defs.h?

Every .c file linked in to gdb includes defs.h already (usually as
it's first include) or includes none of the gdb include files (e.g.,
gnu-regex.c).

So, why does cp-abi.h need to include defs.h explicitly? Any *.c that
needs it should already be including it.

2001-04-24 Jim Blandy <jimb@redhat.com>

(Changes from Daniel Berlin, with revisions by Jim Blandy.)

Abstract out operations specific to particular C++ ABI's, and
invoke them through a function table. This removes the C++ ABI
dependencies scattered throughout the code, and allows us to
cleanly add support for new C++ ABI's.

* cp-abi.h, cp-abi.h, gnu-v2-abi.c, hpacc-abi.c: New files.

*NONE* of these files initialize the rtti_type field within the
cp_abi_ops structure; they all let it default to 0.

* c-typeprint.c, c-valprint.c, dbxread.c, eval.c, gdbtypes.c,
jv-typeprint.c, linespec.c, symtab.c, typeprint.c, valops.c:
#include "cp-abi.h".

For c-valprint.c, eval.c, typeprint.c, and valops.c, it is unclear to
me why you are including cp-abi.h.

* symtab.h (OPNAME_PREFIX_P, VTBL_PREFIX_P, DESTRUCTOR_PREFIX_P):
Deleted. These services are now provided by functions declared in
cp-abi.h.
* value.h (value_rtti_type, value_virtual_fn_field): Same.
* values.c (value_virtual_fn_field): Same, for this definition.
* valops.c (value_rtti_type): Same.
* c-typeprint.c (c_type_print_base): Use the functions from
"cp-abi.h", instead of the old macros, or hard-coded ABI-specific
tests.
* dbxread.c (record_minimal_symbol): Same.
* gdbtypes.c (get_destructor_fn_field, virtual_base_index,
virtual_base_index_skip_primaries): Same.
* jv-typeprint.c (java_type_print_base): Same.
* linespec.c (find_methods, decode_line_1): Same.
* symtab.c (gdb_mangle_name): Same.

* Makefile.in (SFILES): Add the new .c files mentioned above.
(cp_abi_h): New variable.

Your definition of cp_abi_h is simply cp-abi.h -- however, cp-abi.h
includes other header files -- OOPS!

(COMMON_OBS): Add gnu-v2-abi.o, hpacc-abi.o, and cp-abi.o.
(cp-abi.o, gnu-v2-abi.o, hpacc-abi.o): New targets.
(c-typeprint.o, c-valprint.o, dbxread.o, eval.o, gdbtypes.o,
jv-typeprint.o, symtab.o, linespec.o, typeprint.o, valops.o):
Add dependency on $(cp_abi_h).