From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30178 invoked by alias); 28 Jul 2004 04:08:21 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 30147 invoked from network); 28 Jul 2004 04:08:20 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org with SMTP; 28 Jul 2004 04:08:20 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.12.10/8.12.10) with ESMTP id i6S48Ke3004817 for ; Wed, 28 Jul 2004 00:08:20 -0400 Received: from localhost.redhat.com (porkchop.devel.redhat.com [172.16.58.2]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id i6S48Ia02001; Wed, 28 Jul 2004 00:08:19 -0400 Received: from gnu.org (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id 7A9262B9D; Wed, 28 Jul 2004 00:08:13 -0400 (EDT) Message-ID: <410726AD.4030409@gnu.org> Date: Wed, 28 Jul 2004 04:08:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-GB; rv:1.4.1) Gecko/20040217 MIME-Version: 1.0 To: gdb-patches@sources.redhat.com Subject: [patch/rfc/6.2] Mention threads in NEWS and PROBLEMS Content-Type: multipart/mixed; boundary="------------000304010809060104050207" X-SW-Source: 2004-07/txt/msg00413.txt.bz2 This is a multi-part message in MIME format. --------------000304010809060104050207 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 87 Hello, Here's a patch to mention the thread PROBLEM / FIX for the 6.2 branch. Andrew --------------000304010809060104050207 Content-Type: text/plain; name="diffs" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diffs" Content-length: 15044 2004-07-27 Andrew Cagney * defs.h (enum language): Add nr_languages. * language.h (struct language_arch_info): Define. (struct language_defn): Add la_language_arch_info. (language_lookup_primative_type_by_name): Declare. (language_string_char_type): Declare. * language.c (_initialize_language, language_gdbarch_post_init) (struct language_gdbarch, language_gdbarch_data): Implement per-architecture language information. (unknown_language_arch_info, language_string_char_type) (language_lookup_primative_type_by_name): New functions. (unknown_language_defn, auto_language_defn) (local_language_defn): Set la_language_arch_info to unknown_language_arch_info. (unknown_builtin_types): Delete. * gdbtypes.c (lookup_primitive_typename): Use language_lookup_primative_type_by_name. (create_string_type): Use language_string_char_type. * values.c (value_from_string): Use language_string_char_type. * scm-lang.c (scm_language_defn): Add NULL la_language_arch_info. * p-lang.c (pascal_language_defn): Ditto. * m2-lang.c (m2_language_defn): Ditto. * jv-lang.c (java_language_defn): Ditto. * objc-lang.c (objc_language_defn): Ditto. * f-lang.c (f_language_defn): Ditto. * c-lang.c (c_language_defn, cplus_language_defn) (asm_language_defn, minimal_language_defn): Ditto. Index: c-lang.c =================================================================== RCS file: /cvs/src/src/gdb/c-lang.c,v retrieving revision 1.28 diff -p -u -r1.28 c-lang.c --- c-lang.c 6 Jul 2004 19:29:30 -0000 1.28 +++ c-lang.c 28 Jul 2004 02:38:53 -0000 @@ -569,6 +569,7 @@ const struct language_defn c_language_de 0, /* String lower bound */ &builtin_type_char, /* Type of string elements */ default_word_break_characters, + NULL, /* FIXME: la_language_arch_info. */ LANG_MAGIC }; @@ -629,6 +630,7 @@ const struct language_defn cplus_languag 0, /* String lower bound */ &builtin_type_char, /* Type of string elements */ default_word_break_characters, + NULL, /* FIXME: la_language_arch_info. */ LANG_MAGIC }; @@ -666,6 +668,7 @@ const struct language_defn asm_language_ 0, /* String lower bound */ &builtin_type_char, /* Type of string elements */ default_word_break_characters, + NULL, /* FIXME: la_language_arch_info. */ LANG_MAGIC }; @@ -708,6 +711,7 @@ const struct language_defn minimal_langu 0, /* String lower bound */ &builtin_type_char, /* Type of string elements */ default_word_break_characters, + NULL, /* FIXME: la_language_arch_info. */ LANG_MAGIC }; Index: defs.h =================================================================== RCS file: /cvs/src/src/gdb/defs.h,v retrieving revision 1.152 diff -p -u -r1.152 defs.h --- defs.h 17 Jul 2004 03:25:10 -0000 1.152 +++ defs.h 28 Jul 2004 02:38:53 -0000 @@ -220,7 +220,8 @@ enum language language_asm, /* Assembly language */ language_scm, /* Scheme / Guile */ language_pascal, /* Pascal */ - language_minimal /* All other languages, minimal support only */ + language_minimal, /* All other languages, minimal support only */ + nr_languages }; enum precision_type Index: f-lang.c =================================================================== RCS file: /cvs/src/src/gdb/f-lang.c,v retrieving revision 1.24 diff -p -u -r1.24 f-lang.c --- f-lang.c 6 Jul 2004 19:29:31 -0000 1.24 +++ f-lang.c 28 Jul 2004 02:38:53 -0000 @@ -488,6 +488,7 @@ const struct language_defn f_language_de 1, /* String lower bound */ &builtin_type_f_character, /* Type of string elements */ default_word_break_characters, + NULL, /* FIXME: la_language_arch_info. */ LANG_MAGIC }; Index: gdbtypes.c =================================================================== RCS file: /cvs/src/src/gdb/gdbtypes.c,v retrieving revision 1.84 diff -p -u -r1.84 gdbtypes.c --- gdbtypes.c 28 Jul 2004 02:03:51 -0000 1.84 +++ gdbtypes.c 28 Jul 2004 02:38:54 -0000 @@ -774,8 +774,12 @@ create_array_type (struct type *result_t struct type * create_string_type (struct type *result_type, struct type *range_type) { + struct type *string_char_type; + + string_char_type = language_string_char_type (current_language, + current_gdbarch); result_type = create_array_type (result_type, - *current_language->string_char_type, + string_char_type, range_type); TYPE_CODE (result_type) = TYPE_CODE_STRING; return (result_type); @@ -1032,16 +1036,9 @@ type_name_no_tag (const struct type *typ struct type * lookup_primitive_typename (char *name) { - struct type **const *p; - - for (p = current_language->la_builtin_type_vector; *p != NULL; p++) - { - if (strcmp (TYPE_NAME (**p), name) == 0) - { - return (**p); - } - } - return (NULL); + return language_lookup_primative_type_by_name (current_language, + current_gdbarch, + name); } /* Lookup a typedef or primitive type named NAME, Index: jv-lang.c =================================================================== RCS file: /cvs/src/src/gdb/jv-lang.c,v retrieving revision 1.31 diff -p -u -r1.31 jv-lang.c --- jv-lang.c 6 Jul 2004 19:29:31 -0000 1.31 +++ jv-lang.c 28 Jul 2004 02:38:54 -0000 @@ -1114,6 +1114,7 @@ const struct language_defn java_language 0, /* String lower bound */ &builtin_type_char, /* Type of string elements */ default_word_break_characters, + NULL, /* FIXME: la_language_arch_info. */ LANG_MAGIC }; Index: language.c =================================================================== RCS file: /cvs/src/src/gdb/language.c,v retrieving revision 1.46 diff -p -u -r1.46 language.c --- language.c 26 Jul 2004 14:53:02 -0000 1.46 +++ language.c 28 Jul 2004 02:38:54 -0000 @@ -1273,20 +1273,25 @@ static char *unk_lang_class_name (const return NULL; } -static struct type **const (unknown_builtin_types[]) = -{ - 0 -}; static const struct op_print unk_op_print_tab[] = { {NULL, OP_NULL, PREC_NULL, 0} }; +static void +unknown_language_arch_info (struct gdbarch *gdbarch, + struct language_arch_info *lai) +{ + lai->string_char_type = builtin_type (gdbarch)->builtin_char; + lai->primative_type_vector = GDBARCH_OBSTACK_CALLOC (gdbarch, 1, + struct type *); +} + const struct language_defn unknown_language_defn = { "unknown", language_unknown, - &unknown_builtin_types[0], + NULL, range_check_off, type_check_off, case_sensitive_on, @@ -1314,8 +1319,9 @@ const struct language_defn unknown_langu unk_op_print_tab, /* expression operators for printing */ 1, /* c-style arrays */ 0, /* String lower bound */ - &builtin_type_char, /* Type of string elements */ + NULL, default_word_break_characters, + unknown_language_arch_info, /* la_language_arch_info. */ LANG_MAGIC }; @@ -1324,7 +1330,7 @@ const struct language_defn auto_language { "auto", language_auto, - &unknown_builtin_types[0], + NULL, range_check_off, type_check_off, case_sensitive_on, @@ -1352,8 +1358,9 @@ const struct language_defn auto_language unk_op_print_tab, /* expression operators for printing */ 1, /* c-style arrays */ 0, /* String lower bound */ - &builtin_type_char, /* Type of string elements */ + NULL, default_word_break_characters, + unknown_language_arch_info, /* la_language_arch_info. */ LANG_MAGIC }; @@ -1361,7 +1368,7 @@ const struct language_defn local_languag { "local", language_auto, - &unknown_builtin_types[0], + NULL, range_check_off, type_check_off, case_sensitive_on, @@ -1389,11 +1396,82 @@ const struct language_defn local_languag unk_op_print_tab, /* expression operators for printing */ 1, /* c-style arrays */ 0, /* String lower bound */ - &builtin_type_char, /* Type of string elements */ + NULL, default_word_break_characters, + unknown_language_arch_info, /* la_language_arch_info. */ LANG_MAGIC }; +/* Per-architecture language information. */ + +static struct gdbarch_data *language_gdbarch_data; + +struct language_gdbarch +{ + /* A vector of per-language per-architecture info. Indexed by "enum + language". */ + struct language_arch_info arch_info[nr_languages]; +}; + +static void * +language_gdbarch_post_init (struct gdbarch *gdbarch) +{ + struct language_gdbarch *l; + int i; + + l = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct language_gdbarch); + for (i = 0; i <= languages_size; i++) + { + if (languages[i] != NULL + && languages[i]->la_language_arch_info != NULL) + languages[i]->la_language_arch_info + (gdbarch, l->arch_info + languages[i]->la_language); + } + return l; +} + +struct type * +language_string_char_type (const struct language_defn *la, + struct gdbarch *gdbarch) +{ + struct language_gdbarch *ld = gdbarch_data (gdbarch, + language_gdbarch_data); + if (ld->arch_info[la->la_language].string_char_type != NULL) + return ld->arch_info[la->la_language].string_char_type; + else + return (*la->string_char_type); +} + +struct type * +language_lookup_primative_type_by_name (const struct language_defn *la, + struct gdbarch *gdbarch, + const char *name) +{ + struct language_gdbarch *ld = gdbarch_data (gdbarch, + language_gdbarch_data); + if (ld->arch_info[la->la_language].primative_type_vector != NULL) + { + struct type *const *p; + for (p = ld->arch_info[la->la_language].primative_type_vector; + (*p) != NULL; + p++) + { + if (strcmp (TYPE_NAME (*p), name) == 0) + return (*p); + } + } + else + { + struct type **const *p; + for (p = current_language->la_builtin_type_vector; *p != NULL; p++) + { + if (strcmp (TYPE_NAME (**p), name) == 0) + return (**p); + } + } + return (NULL); +} + /* Initialize the language routines */ void @@ -1401,6 +1479,9 @@ _initialize_language (void) { struct cmd_list_element *set, *show; + language_gdbarch_data + = gdbarch_data_register_post_init (language_gdbarch_post_init); + /* GDB commands for language specific stuff */ set = add_set_cmd ("language", class_support, var_string_noescape, Index: language.h =================================================================== RCS file: /cvs/src/src/gdb/language.h,v retrieving revision 1.27 diff -p -u -r1.27 language.h --- language.h 6 Jul 2004 19:29:31 -0000 1.27 +++ language.h 28 Jul 2004 02:38:54 -0000 @@ -137,6 +137,26 @@ struct language_format_info char *la_format_suffix; /* Suffix for custom format string */ }; +/* Per architecture (OS/ABI) language information. */ + +struct language_arch_info +{ + /* Its primative types. This is a vector ended by a NULL pointer. + These types can be specified by name in parsing types in + expressions, regardless of whether the program being debugged + actually defines such a type. */ + struct type **primative_type_vector; + /* Type of elements of strings. */ + struct type *string_char_type; +}; + +struct type *language_string_char_type (const struct language_defn *l, + struct gdbarch *gdbarch); + +struct type *language_lookup_primative_type_by_name (const struct language_defn *l, + struct gdbarch *gdbarch, + const char *name); + /* Structure tying together assorted information about a language. */ struct language_defn @@ -284,9 +304,12 @@ struct language_defn /* The list of characters forming word boundaries. */ char *(*la_word_break_characters) (void); + /* The per-architecture (OS/ABI) language information. */ + void (*la_language_arch_info) (struct gdbarch *, + struct language_arch_info *); + /* Add fields above this point, so the magic number is always last. */ /* Magic number for compat checking */ - long la_magic; }; Index: m2-lang.c =================================================================== RCS file: /cvs/src/src/gdb/m2-lang.c,v retrieving revision 1.17 diff -p -u -r1.17 m2-lang.c --- m2-lang.c 6 Jul 2004 19:29:31 -0000 1.17 +++ m2-lang.c 28 Jul 2004 02:38:54 -0000 @@ -441,6 +441,7 @@ const struct language_defn m2_language_d 0, /* String lower bound */ &builtin_type_m2_char, /* Type of string elements */ default_word_break_characters, + NULL, /* FIXME: la_language_arch_info. */ LANG_MAGIC }; Index: objc-lang.c =================================================================== RCS file: /cvs/src/src/gdb/objc-lang.c,v retrieving revision 1.36 diff -p -u -r1.36 objc-lang.c --- objc-lang.c 6 Jul 2004 19:29:31 -0000 1.36 +++ objc-lang.c 28 Jul 2004 02:38:56 -0000 @@ -685,6 +685,7 @@ const struct language_defn objc_language 0, /* String lower bound */ &builtin_type_char, /* Type of string elements */ default_word_break_characters, + NULL, /* FIXME: la_language_arch_info. */ LANG_MAGIC }; Index: p-lang.c =================================================================== RCS file: /cvs/src/src/gdb/p-lang.c,v retrieving revision 1.19 diff -p -u -r1.19 p-lang.c --- p-lang.c 6 Jul 2004 19:29:31 -0000 1.19 +++ p-lang.c 28 Jul 2004 02:38:56 -0000 @@ -477,6 +477,7 @@ const struct language_defn pascal_langua 0, /* String lower bound */ &builtin_type_char, /* Type of string elements */ default_word_break_characters, + NULL, /* FIXME: la_language_arch_info. */ LANG_MAGIC }; Index: scm-lang.c =================================================================== RCS file: /cvs/src/src/gdb/scm-lang.c,v retrieving revision 1.24 diff -p -u -r1.24 scm-lang.c --- scm-lang.c 6 Jul 2004 19:29:31 -0000 1.24 +++ scm-lang.c 28 Jul 2004 02:38:56 -0000 @@ -276,6 +276,7 @@ const struct language_defn scm_language_ 0, /* String lower bound */ &builtin_type_char, /* Type of string elements */ default_word_break_characters, + NULL, /* FIXME: la_language_arch_info. */ LANG_MAGIC }; Index: values.c =================================================================== RCS file: /cvs/src/src/gdb/values.c,v retrieving revision 1.70 diff -p -u -r1.70 values.c --- values.c 20 Jun 2004 18:10:14 -0000 1.70 +++ values.c 28 Jul 2004 02:38:56 -0000 @@ -1170,15 +1170,18 @@ value_from_string (char *ptr) struct value *val; int len = strlen (ptr); int lowbound = current_language->string_lower_bound; - struct type *rangetype = - create_range_type ((struct type *) NULL, - builtin_type_int, - lowbound, len + lowbound - 1); - struct type *stringtype = - create_array_type ((struct type *) NULL, - *current_language->string_char_type, - rangetype); - + struct type *string_char_type; + struct type *rangetype; + struct type *stringtype; + + rangetype = create_range_type ((struct type *) NULL, + builtin_type_int, + lowbound, len + lowbound - 1); + string_char_type = language_string_char_type (current_language, + current_gdbarch); + stringtype = create_array_type ((struct type *) NULL, + string_char_type, + rangetype); val = allocate_value (stringtype); memcpy (VALUE_CONTENTS_RAW (val), ptr, len); return val; --------------000304010809060104050207--