From 3a96536b1719be040188657f7cb1afb83ab914ca Mon Sep 17 00:00:00 2001 From: Stan Shebs Date: Thu, 18 Mar 2010 01:47:33 +0000 Subject: [PATCH] 2010-03-17 Stan Shebs * ax-gdb.c (require_rvalue): Disallow non-scalars. --- gdb/ChangeLog | 2 ++ gdb/ax-gdb.c | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2b5e242de55..f961562f399 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,7 @@ 2010-03-17 Stan Shebs + * ax-gdb.c (require_rvalue): Disallow non-scalars. + * infcall.c: Include tracepoint.h. (call_function_by_hand): Disallow calls in tfind mode. * infcmd.c: Include tracepoint.h. diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c index 091fd95f1fc..4307de3acd6 100644 --- a/gdb/ax-gdb.c +++ b/gdb/ax-gdb.c @@ -745,6 +745,15 @@ gen_int_literal (struct agent_expr *ax, struct axs_value *value, LONGEST k, static void require_rvalue (struct agent_expr *ax, struct axs_value *value) { + /* Only deal with scalars, structs and such may be too large + to fit in a stack entry. */ + value->type = check_typedef (value->type); + if (TYPE_CODE (value->type) == TYPE_CODE_ARRAY + || TYPE_CODE (value->type) == TYPE_CODE_STRUCT + || TYPE_CODE (value->type) == TYPE_CODE_UNION + || TYPE_CODE (value->type) == TYPE_CODE_FUNC) + error ("Value not scalar: cannot be an rvalue."); + switch (value->kind) { case axs_rvalue: