X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Finfcall.h;h=a77a6ce44f84afedc9ea8f38ce8e78f8fcb80a75;hb=030a2e78acf66c5c12e073ec3887a167da7a7195;hp=6721f4cef3a8eac9fcd2d63d151ec53a3f6dec57;hpb=197e01b6dcd118b70ed3621b62b2ff3fa929d50f;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/infcall.h b/gdb/infcall.h index 6721f4cef3..a77a6ce44f 100644 --- a/gdb/infcall.h +++ b/gdb/infcall.h @@ -1,12 +1,12 @@ /* Perform an inferior function call, for GDB, the GNU debugger. - Copyright (C) 2003 Free Software Foundation, Inc. + Copyright (C) 2003-2020 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 + 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, @@ -15,29 +15,60 @@ 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 INFCALL_H #define INFCALL_H +#include "dummy-frame.h" +#include "gdbsupport/array-view.h" + struct value; struct type; +/* Determine a function's address and its return type from its value. + If the function is a GNU ifunc, then return the address of the + target function, and set *FUNCTION_TYPE to the target function's + type, and *RETVAL_TYPE to the target function's return type. + Calls error() if the function is not valid for calling. */ + extern CORE_ADDR find_function_addr (struct value *function, - struct type **retval_type); + struct type **retval_type, + struct type **function_type = NULL); /* Perform a function call in the inferior. - ARGS is a vector of values of arguments (NARGS of them). FUNCTION - is a value, the function to be called. Returns a value - representing what the function returned. May fail to return, if a - breakpoint or signal is hit during the execution of the function. + ARGS is a vector of values of arguments. FUNCTION is a value, the + function to be called. Returns a value representing what the + function returned. May fail to return, if a breakpoint or signal + is hit during the execution of the function. + + DEFAULT_RETURN_TYPE is used as function return type if the return + type is unknown. This is used when calling functions with no debug + info. + + ARGS is modified to contain coerced values. */ + +extern struct value *call_function_by_hand (struct value *function, + type *default_return_type, + gdb::array_view args); + +/* Similar to call_function_by_hand and additional call + register_dummy_frame_dtor with DUMMY_DTOR and DUMMY_DTOR_DATA for the + created inferior call dummy frame. */ + +extern struct value * + call_function_by_hand_dummy (struct value *function, + type *default_return_type, + gdb::array_view args, + dummy_frame_dtor_ftype *dummy_dtor, + void *dummy_dtor_data); - ARGS is modified to contain coerced values. */ +/* Throw an error indicating that the user tried to call a function + that has unknown return type. FUNC_NAME is the name of the + function to be included in the error message; may be NULL, in which + case the error message doesn't include a function name. */ -extern struct value *call_function_by_hand (struct value *function, int nargs, - struct value **args); +extern void error_call_unknown_return_type (const char *func_name); #endif