This is the mail archive of the gdb-patches@sourceware.cygnus.com mailing list for the GDB project. See the GDB home page for more information.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
On m68k-motorola-sysv (COFF), the following tests fail, because of a hp-specific new code in valops.c. Can someone fix that ? For me, testing only `using_gcc' seems too wide. p t_func_values(add,func_val2) You cannot use function <add> as argument. You must use a pointer to function type variable. Command ignored. (gdb) FAIL: gdb.base/callfuncs2.exp: p t_func_values(add,func_val2) p t_func_values(func_val1,doubleit) You cannot use function <doubleit> as argument. You must use a pointer to function type variable. Command ignored. (gdb) FAIL: gdb.base/callfuncs2.exp: p t_func_values(func_val1,doubleit) p t_call_add(func_val1,3,4) $48 = 7 (gdb) PASS: gdb.base/callfuncs2.exp: p t_call_add(func_val1,3,4) p t_call_add(add,3,4) You cannot use function <add> as argument. You must use a pointer to function type variable. Command ignored. (gdb) FAIL: gdb.base/callfuncs2.exp: p t_call_add(add,3,4) Culprit code : /*elz: this code is to handle the case in which the function to be called has a pointer to function as parameter and the corresponding actual argu ment is the address of a function and not a pointer to function variable. In aCC compiled code, the calls through pointers to functions (in the bo dy of the function called by hand) are made via $$dyncall_external which requires some registers setting, this is taken care of if we call via a function pointer variable, but not via a function address. In cc this is not a problem. */ if (using_gcc == 0) if (param_type) /* if this parameter is a pointer to function*/ if (TYPE_CODE (param_type) == TYPE_CODE_PTR) if (TYPE_CODE (param_type->target_type) == TYPE_CODE_FUNC) /* elz: FIXME here should go the test about the compiler used to compile the target. We want to issue the error message only if the compiler used was HP's aCC. If we used HP's cc, then there is no problem and no need to return at this point */ if (using_gcc == 0) /* && compiler == aCC*/ /* go see if the actual parameter is a variable of type pointer to function or just a function */ if (args[i]->lval == not_lval) { char *arg_name; if (find_pc_partial_function((CORE_ADDR)args[i]->aligner.con tents[0], &arg_name, NULL, NULL)) error("\ You cannot use function <%s> as argument. \n\ You must use a pointer to function type variable. Command ignored.", arg_name); }