Add proper handling for internal functions and STT_GNU_IFUNC symbols in Ada mode.
The code for handling calls to internal functions (esp., Python functions) and for handling STT_GNU_IFUNC had not been added to the Ada expression evaluator. This change adapts them from eval.c. gdb/Changelog: * ada-lang.c (ada_evaluate_subexp): Add cases for TYPE_CODE_INTERNAL_FUNCTION and for TYPE_GNU_IFUNC, following their treatment in eval.c.
This commit is contained in:
parent
8d1b3521db
commit
c8ea197278
2 changed files with 24 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2012-04-21 Paul Hilfinger <hilfinger@adacore.com>
|
||||||
|
|
||||||
|
* ada-lang.c (ada_evaluate_subexp): Add cases for
|
||||||
|
TYPE_CODE_INTERNAL_FUNCTION and for TYPE_GNU_IFUNC, following
|
||||||
|
their treatment in eval.c.
|
||||||
|
|
||||||
2012-04-21 David S. Miller <davem@davemloft.net>
|
2012-04-21 David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
* sparc-tdep.c (X_DISP10): Define.
|
* sparc-tdep.c (X_DISP10): Define.
|
||||||
|
|
|
@ -9717,8 +9717,25 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
|
||||||
{
|
{
|
||||||
case TYPE_CODE_FUNC:
|
case TYPE_CODE_FUNC:
|
||||||
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
||||||
return allocate_value (TYPE_TARGET_TYPE (type));
|
{
|
||||||
|
struct type *rtype = TYPE_TARGET_TYPE (type);
|
||||||
|
|
||||||
|
if (TYPE_GNU_IFUNC (type))
|
||||||
|
return allocate_value (TYPE_TARGET_TYPE (rtype));
|
||||||
|
return allocate_value (rtype);
|
||||||
|
}
|
||||||
return call_function_by_hand (argvec[0], nargs, argvec + 1);
|
return call_function_by_hand (argvec[0], nargs, argvec + 1);
|
||||||
|
case TYPE_CODE_INTERNAL_FUNCTION:
|
||||||
|
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
||||||
|
/* We don't know anything about what the internal
|
||||||
|
function might return, but we have to return
|
||||||
|
something. */
|
||||||
|
return value_zero (builtin_type (exp->gdbarch)->builtin_int,
|
||||||
|
not_lval);
|
||||||
|
else
|
||||||
|
return call_internal_function (exp->gdbarch, exp->language_defn,
|
||||||
|
argvec[0], nargs, argvec + 1);
|
||||||
|
|
||||||
case TYPE_CODE_STRUCT:
|
case TYPE_CODE_STRUCT:
|
||||||
{
|
{
|
||||||
int arity;
|
int arity;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue