X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Flanguage.c;h=d5c6a94b095fc0c22d9c9c19bbc9d2412d95d642;hb=41f1b6975dce5616800a8ff1acb544019c7bc132;hp=654f0f498a3ca05b6b9c46adf3a25e19381fc51f;hpb=1754f103e6323b908fc004d992930933a04183ce;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/language.c b/gdb/language.c index 654f0f498a..d5c6a94b09 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -1,7 +1,7 @@ /* Multiple source language support for GDB. - Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, - 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, + 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. Contributed by the Department of Computer Science at the State University of New York at Buffalo. @@ -10,7 +10,7 @@ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -19,9 +19,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + along with this program. If not, see . */ /* This file contains functions that return things that are specific to languages. Each function should examine current_language if necessary, @@ -77,7 +75,7 @@ static void unk_lang_print_type (struct type *, char *, struct ui_file *, static int unk_lang_value_print (struct value *, struct ui_file *, int, enum val_prettyprint); -static CORE_ADDR unk_lang_trampoline (CORE_ADDR pc); +static CORE_ADDR unk_lang_trampoline (struct frame_info *, CORE_ADDR pc); /* Forward declaration */ extern const struct language_defn unknown_language_defn; @@ -324,32 +322,34 @@ show_case_command (struct ui_file *file, int from_tty, "Warning: the current case sensitivity setting does not match the language.\n"); } -/* Set command. Change the setting for case sensitivity. */ +/* Set command. Change the setting for case sensitivity. */ + static void set_case_command (char *ignore, int from_tty, struct cmd_list_element *c) { - if (DEPRECATED_STREQ (case_sensitive, "on")) - { - case_sensitivity = case_sensitive_on; - case_mode = case_mode_manual; - } - else if (DEPRECATED_STREQ (case_sensitive, "off")) - { - case_sensitivity = case_sensitive_off; - case_mode = case_mode_manual; - } - else if (DEPRECATED_STREQ (case_sensitive, "auto")) - { - case_mode = case_mode_auto; - set_type_range_case (); - /* Avoid hitting the set_case_str call below. We - did it in set_type_range_case. */ - return; - } + if (strcmp (case_sensitive, "on") == 0) + { + case_sensitivity = case_sensitive_on; + case_mode = case_mode_manual; + } + else if (strcmp (case_sensitive, "off") == 0) + { + case_sensitivity = case_sensitive_off; + case_mode = case_mode_manual; + } + else if (strcmp (case_sensitive, "auto") == 0) + { + case_mode = case_mode_auto; + set_type_range_case (); + /* Avoid hitting the set_case_str call below. We did it in + set_type_range_case. */ + return; + } else - { - warning (_("Unrecognized case-sensitive setting: \"%s\""), case_sensitive); - } + { + warning (_("Unrecognized case-sensitive setting: \"%s\""), + case_sensitive); + } set_case_str(); show_case_command (NULL, from_tty, NULL, NULL); } @@ -918,7 +918,7 @@ language_enum (char *str) int i; for (i = 0; i < languages_size; i++) - if (DEPRECATED_STREQ (languages[i]->la_name, str)) + if (strcmp (languages[i]->la_name, str) == 0) return languages[i]->la_language; return language_unknown; @@ -1003,7 +1003,7 @@ add_language (const struct language_defn *lang) Return the result from the first that returns non-zero, or 0 if all `fail'. */ CORE_ADDR -skip_language_trampoline (CORE_ADDR pc) +skip_language_trampoline (struct frame_info *frame, CORE_ADDR pc) { int i; @@ -1011,7 +1011,7 @@ skip_language_trampoline (CORE_ADDR pc) { if (languages[i]->skip_trampoline) { - CORE_ADDR real_pc = (languages[i]->skip_trampoline) (pc); + CORE_ADDR real_pc = (languages[i]->skip_trampoline) (frame, pc); if (real_pc) return real_pc; } @@ -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. */ @@ -1055,6 +1072,17 @@ default_word_break_characters (void) return " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,-"; } +/* Print the index of array elements using the C99 syntax. */ + +void +default_print_array_index (struct value *index_value, struct ui_file *stream, + int format, enum val_prettyprint pretty) +{ + fprintf_filtered (stream, "["); + LA_VALUE_PRINT (index_value, stream, format, pretty); + fprintf_filtered (stream, "] = "); +} + /* Define the language that is no language. */ static int @@ -1117,7 +1145,7 @@ unk_lang_value_print (struct value *val, struct ui_file *stream, int format, error (_("internal error - unimplemented function unk_lang_value_print called.")); } -static CORE_ADDR unk_lang_trampoline (CORE_ADDR pc) +static CORE_ADDR unk_lang_trampoline (struct frame_info *frame, CORE_ADDR pc) { return 0; } @@ -1179,6 +1207,8 @@ const struct language_defn unknown_language_defn = NULL, default_word_break_characters, unknown_language_arch_info, /* la_language_arch_info. */ + default_print_array_index, + default_pass_by_reference, LANG_MAGIC }; @@ -1215,6 +1245,8 @@ const struct language_defn auto_language_defn = NULL, default_word_break_characters, unknown_language_arch_info, /* la_language_arch_info. */ + default_print_array_index, + default_pass_by_reference, LANG_MAGIC }; @@ -1250,6 +1282,8 @@ const struct language_defn local_language_defn = NULL, default_word_break_characters, unknown_language_arch_info, /* la_language_arch_info. */ + default_print_array_index, + default_pass_by_reference, LANG_MAGIC };