From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Taylor To: Jim Blandy Cc: gdb-patches@sources.redhat.com, Anthony Green Subject: Re: RFA: abstract C++ ABI dependencies Date: Tue, 24 Apr 2001 12:27:00 -0000 Message-id: <200104241926.PAA27063@houston.candd.org> X-SW-Source: 2001-04/msg00224.html From: Jim Blandy 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 (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).