diff options
author | Andrew Cagney <cagney@redhat.com> | 2003-11-19 16:27:56 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2003-11-19 16:27:56 +0000 |
commit | 667e784fcb11bf5af2900371192cc997a606b18e (patch) | |
tree | f1c1a541b3e4b3fb3ebb1989cc511fe096172edc /gdb/stack.c | |
parent | 0976f6a782b7567f2ef7500b8c9ec49d7cc0686a (diff) | |
download | gdb-667e784fcb11bf5af2900371192cc997a606b18e.zip gdb-667e784fcb11bf5af2900371192cc997a606b18e.tar.gz gdb-667e784fcb11bf5af2900371192cc997a606b18e.tar.bz2 |
2003-11-19 Andrew Cagney <cagney@redhat.com>
* stack.c (return_command): Handle "void", "legacy" and "unknown
location" return values separatly.
* values.c (using_struct_return): Return 0 for a "void" return
type. Mention "register_value_being_returned".
(register_value_being_returned): Mention "using_struct_return".
Diffstat (limited to 'gdb/stack.c')
-rw-r--r-- | gdb/stack.c | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/gdb/stack.c b/gdb/stack.c index dc8733e..db45284 100644 --- a/gdb/stack.c +++ b/gdb/stack.c @@ -1854,33 +1854,33 @@ return_command (char *retval_exp, int from_tty) if (VALUE_LAZY (return_value)) value_fetch_lazy (return_value); - /* Check that this architecture can handle the function's return - type. In the case of "struct convention", still do the - "return", just also warn the user. */ - if (gdbarch_return_value_p (current_gdbarch)) + if (TYPE_CODE (return_type) == TYPE_CODE_VOID) + /* If the return-type is "void", don't try to find the + return-value's location. However, do still evaluate the + return expression so that, even when the expression result + is discarded, side effects such as "return i++" still + occure. */ + return_value = NULL; + else if (!gdbarch_return_value_p (current_gdbarch) + && (TYPE_CODE (return_type) == TYPE_CODE_STRUCT + || TYPE_CODE (return_type) == TYPE_CODE_UNION)) { - if (gdbarch_return_value (current_gdbarch, return_type, - NULL, NULL, NULL) - == RETURN_VALUE_STRUCT_CONVENTION) - return_value = NULL; + /* NOTE: cagney/2003-10-20: Compatibility hack for legacy + code. Old architectures don't expect STORE_RETURN_VALUE + to be called with with a small struct that needs to be + stored in registers. Don't start doing it now. */ + query_prefix = "\ +A structure or union return type is not supported by this architecture.\n\ +If you continue, the return value that you specified will be ignored.\n"; + return_value = NULL; } - else + else if (using_struct_return (return_type, 0)) { - /* NOTE: cagney/2003-10-20: The double check is to ensure - that the STORE_RETURN_VALUE call, further down, is not - applied to a struct or union return-value. It wasn't - allowed previously, so don't start allowing it now. An - ABI that uses "register convention" to return small - structures and should implement the "return_value" - architecture method. */ - if (using_struct_return (return_type, 0) - || TYPE_CODE (return_type) == TYPE_CODE_STRUCT - || TYPE_CODE (return_type) == TYPE_CODE_UNION) - return_value = NULL; + query_prefix = "\ +The location at which to store the function's return value is unknown.\n\ +If you continue, the return value that you specified will be ignored.\n"; + return_value = NULL; } - if (return_value == NULL) - query_prefix = "\ -The location at which to store the function's return value is unknown.\n"; } /* Does an interactive user really want to do this? Include |