X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fcp-abi.h;h=0753259a8925112da1c6d2dd99dfd37b939c0ab7;hb=a68ddad51d3e6245d3bdebabbe0a43267cd72a32;hp=1e22dbbfc14766e1f7e377b727015ed3b7729cb7;hpb=0d5de0100fd9c669790851af4f9f50704a24b453;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/cp-abi.h b/gdb/cp-abi.h index 1e22dbbfc1..0753259a89 100644 --- a/gdb/cp-abi.h +++ b/gdb/cp-abi.h @@ -3,15 +3,14 @@ Contributed by Daniel Berlin - Copyright (C) 2001, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 2001, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. This file is part of GDB. - This program is free software; you can redistribute it and/or - modify - it under the terms of the GNU General Public License as published - by - the Free Software Foundation; either version 2 of the License, or + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -20,9 +19,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ #ifndef CP_ABI_H_ #define CP_ABI_H_ 1 @@ -31,6 +28,7 @@ struct fn_field; struct type; struct value; struct ui_file; +struct frame_info; /* The functions here that attempt to determine what sort of thing a mangled name refers to may well be revised in the future. It would @@ -154,21 +152,29 @@ extern int baseclass_offset (struct type *type, int index, void cplus_print_method_ptr (const gdb_byte *contents, struct type *type, struct ui_file *stream); -/* Return the size of a pointer to member function for the current - architecture. */ -int cplus_method_ptr_size (void); +/* Return the size of a pointer to member function of type TO_TYPE. */ +int cplus_method_ptr_size (struct type *to_type); /* Return the method which should be called by applying METHOD_PTR to *THIS_P, and adjust *THIS_P if necessary. */ struct value *cplus_method_ptr_to_value (struct value **this_p, struct value *method_ptr); -/* Create the byte pattern in CONTENTS representing a pointer to - member function at ADDRESS (if IS_VIRTUAL is 0) or with virtual - table offset ADDRESS (if IS_VIRTUAL is 1). This is the opposite - of cplus_method_ptr_to_value. */ -void cplus_make_method_ptr (gdb_byte *CONTENTS, CORE_ADDR address, - int is_virtual); +/* Create the byte pattern in CONTENTS representing a pointer of + type TYPE to member function at ADDRESS (if IS_VIRTUAL is 0) + or with virtual table offset ADDRESS (if IS_VIRTUAL is 1). + This is the opposite of cplus_method_ptr_to_value. */ +void cplus_make_method_ptr (struct type *type, gdb_byte *CONTENTS, + CORE_ADDR address, int is_virtual); + +/* Determine if we are currently in a C++ thunk. If so, get the address + of the routine we are thunking to and continue to there instead. */ + +CORE_ADDR cplus_skip_trampoline (struct frame_info *frame, CORE_ADDR stop_pc); + +/* Return non-zero if an argument of type TYPE should be passed by reference + instead of value. */ +extern int cp_pass_by_reference (struct type *type); struct cp_abi_ops { @@ -189,9 +195,11 @@ struct cp_abi_ops const bfd_byte *valaddr, CORE_ADDR address); void (*print_method_ptr) (const gdb_byte *contents, struct type *type, struct ui_file *stream); - int (*method_ptr_size) (void); - void (*make_method_ptr) (gdb_byte *, CORE_ADDR, int); + int (*method_ptr_size) (struct type *); + void (*make_method_ptr) (struct type *, gdb_byte *, CORE_ADDR, int); struct value * (*method_ptr_to_value) (struct value **, struct value *); + CORE_ADDR (*skip_trampoline) (struct frame_info *, CORE_ADDR); + int (*pass_by_reference) (struct type *type); };