From 41f1b6975dce5616800a8ff1acb544019c7bc132 Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Sun, 23 Sep 2007 16:25:06 +0000 Subject: * 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. --- gdb/language.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'gdb/language.c') 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 }; -- cgit v1.1