diff options
author | Daniel Jacobowitz <drow@false.org> | 2007-09-23 16:25:06 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2007-09-23 16:25:06 +0000 |
commit | 41f1b6975dce5616800a8ff1acb544019c7bc132 (patch) | |
tree | f3e49925507634d70cb6d6e1fbd9ce7c6b8ec313 /gdb/language.c | |
parent | 3f213f78ed9182dbdeb3500dab729a6aad17dfd9 (diff) | |
download | gdb-41f1b6975dce5616800a8ff1acb544019c7bc132.zip gdb-41f1b6975dce5616800a8ff1acb544019c7bc132.tar.gz gdb-41f1b6975dce5616800a8ff1acb544019c7bc132.tar.bz2 |
* infcall.c (call_function_by_hand): Handle language-specific
pass and return by reference.
* cp-abi.c (cp_pass_by_reference): New.
* cp-abi.h (cp_pass_by_reference): Declare.
(struct cp_abi_ops): Add pass_by_reference.
* gnu-v3-abi.c (gnuv3_pass_by_reference): New.
(init_gnuv3_ops): Set pass_by_reference.
* language.c (language_pass_by_reference): New.
(default_pass_by_reference): New.
(unknown_language_defn, auto_language_defn, local_language_defn): Add
default_pass_by_reference.
* langauge.h (struct language_defn): Add la_pass_by_reference.
(language_pass_by_reference, default_pass_by_reference): Declare.
* ada-lang.c (ada_language_defn): Add default_pass_by_reference.
* c-lang.c (c_language_defn, asm_language_defn)
(minimal_language_defn): Likewise.
(cplus_language_defn): Add cp_pass_by_reference.
* f-lang.c (f_language_defn): Add default_pass_by_reference.
* jv-lang.c (java_language_defn): Likewise.
* m2-lang.c (m2_language_defn): Likewise.
* objc-lang.c (objc_language_defn): Likewise.
* p-lang.c (pascal_language_defn): Likewise.
* scm-lang.c (scm_language_defn): Likewise
* gdb.cp/pass-by-ref.cc, gdb.cp/pass-by-ref.exp: New files.
Diffstat (limited to 'gdb/language.c')
-rw-r--r-- | gdb/language.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/gdb/language.c b/gdb/language.c index 3cc513f..d5c6a94 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -1045,6 +1045,23 @@ language_class_name_from_physname (const struct language_defn *current_language, return NULL; } +/* Return non-zero if TYPE should be passed (and returned) by + reference at the language level. */ +int +language_pass_by_reference (struct type *type) +{ + return current_language->la_pass_by_reference (type); +} + +/* Return zero; by default, types are passed by value at the language + level. The target ABI may pass or return some structs by reference + independent of this. */ +int +default_pass_by_reference (struct type *type) +{ + return 0; +} + /* Return the default string containing the list of characters delimiting words. This is a reasonable default value that most languages should be able to use. */ @@ -1191,6 +1208,7 @@ const struct language_defn unknown_language_defn = default_word_break_characters, unknown_language_arch_info, /* la_language_arch_info. */ default_print_array_index, + default_pass_by_reference, LANG_MAGIC }; @@ -1228,6 +1246,7 @@ const struct language_defn auto_language_defn = default_word_break_characters, unknown_language_arch_info, /* la_language_arch_info. */ default_print_array_index, + default_pass_by_reference, LANG_MAGIC }; @@ -1264,6 +1283,7 @@ const struct language_defn local_language_defn = default_word_break_characters, unknown_language_arch_info, /* la_language_arch_info. */ default_print_array_index, + default_pass_by_reference, LANG_MAGIC }; |