From acf78c27f8652e2bb2c35fc488766312bccc3487 Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Wed, 8 Nov 2017 19:32:14 -0500 Subject: [PATCH] WIP: Treat minimal symbol as integers when in Ada --- gdb/ada-lang.c | 15 +++++++++++++++ gdb/eval.c | 2 +- gdb/value.h | 4 ++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 40213b5..8d987a1 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -10355,6 +10355,21 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp, return arg1; + case OP_VAR_MSYM_VALUE: + { + (*pos) += 3; + + minimal_symbol *msymbol = exp->elts[pc + 2].msymbol; + arg1 = evaluate_var_msym_value (noside, exp->elts[pc + 1].objfile, + msymbol); + if (noside != EVAL_AVOID_SIDE_EFFECTS + && TYPE_CODE (value_type (arg1)) == TYPE_CODE_ERROR) + arg1 = ada_value_cast (builtin_type (exp->gdbarch)->builtin_int, + arg1, noside); + + return arg1; + } + case OP_STRING: { struct value *result; diff --git a/gdb/eval.c b/gdb/eval.c index 94ddfdb..eca4643 100644 --- a/gdb/eval.c +++ b/gdb/eval.c @@ -738,7 +738,7 @@ evaluate_var_value (enum noside noside, const block *blk, symbol *var) /* Helper for evaluating an OP_VAR_MSYM_VALUE. */ -static value * +value * evaluate_var_msym_value (enum noside noside, struct objfile *objfile, minimal_symbol *msymbol) { diff --git a/gdb/value.h b/gdb/value.h index b1b8c6d..64556c5 100644 --- a/gdb/value.h +++ b/gdb/value.h @@ -885,6 +885,10 @@ extern char *extract_field_op (struct expression *exp, int *subexp); extern struct value *evaluate_subexp_with_coercion (struct expression *, int *, enum noside); +extern struct value *evaluate_var_msym_value (enum noside noside, + struct objfile *objfile, + minimal_symbol *msymbol); + extern struct value *parse_and_eval (const char *exp); extern struct value *parse_to_comma_and_eval (const char **expp); -- 2.1.4