X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gdb%2Fgo-lang.c;h=5af88f805a782828a05d7aacbca34548f0bf65fb;hb=74da8643455ce5342854b3be7f9619ca51571b07;hp=42535dfd02dc1622812f27b037477b3d1475b7ff;hpb=3b7344d5ab495cd82b6c72ec5e00d018549837fb;p=external%2Fbinutils.git diff --git a/gdb/go-lang.c b/gdb/go-lang.c index 42535df..5af88f8 100644 --- a/gdb/go-lang.c +++ b/gdb/go-lang.c @@ -1,6 +1,6 @@ /* Go language support routines for GDB, the GNU debugger. - Copyright (C) 2012-2014 Free Software Foundation, Inc. + Copyright (C) 2012-2019 Free Software Foundation, Inc. This file is part of GDB. @@ -32,9 +32,7 @@ */ #include "defs.h" -#include "gdb_assert.h" #include "gdb_obstack.h" -#include #include "block.h" #include "symtab.h" #include "language.h" @@ -79,8 +77,8 @@ gccgo_string_p (struct type *type) struct type *type0 = TYPE_FIELD_TYPE (type, 0); struct type *type1 = TYPE_FIELD_TYPE (type, 1); - CHECK_TYPEDEF (type0); - CHECK_TYPEDEF (type1); + type0 = check_typedef (type0); + type1 = check_typedef (type1); if (TYPE_CODE (type0) == TYPE_CODE_PTR && strcmp (TYPE_FIELD_NAME (type, 0), "__data") == 0 @@ -89,7 +87,7 @@ gccgo_string_p (struct type *type) { struct type *target_type = TYPE_TARGET_TYPE (type0); - CHECK_TYPEDEF (target_type); + target_type = check_typedef (target_type); if (TYPE_CODE (target_type) == TYPE_CODE_INT && TYPE_LENGTH (target_type) == 1 @@ -108,8 +106,8 @@ static int sixg_string_p (struct type *type) { if (TYPE_NFIELDS (type) == 2 - && TYPE_TAG_NAME (type) != NULL - && strcmp (TYPE_TAG_NAME (type), "string") == 0) + && TYPE_NAME (type) != NULL + && strcmp (TYPE_NAME (type), "string") == 0) return 1; return 0; @@ -121,7 +119,7 @@ sixg_string_p (struct type *type) enum go_type go_classify_struct_type (struct type *type) { - CHECK_TYPEDEF (type); + type = check_typedef (type); /* Recognize strings as they're useful to be able to print without pretty-printers. */ @@ -197,9 +195,9 @@ unpack_mangled_go_symbol (const char *mangled_name, /* Pointer to "N" if valid "N_" found. */ char *method_type; /* Pointer to the first '.'. */ - char *first_dot; + const char *first_dot; /* Pointer to the last '.'. */ - char *last_dot; + const char *last_dot; /* Non-zero if we saw a pointer indicator. */ int saw_pointer; @@ -235,8 +233,8 @@ unpack_mangled_go_symbol (const char *mangled_name, libgo_.*: used by gccgo's runtime Thus we don't support -fgo-prefix (except as used by the runtime). */ - if (strncmp (mangled_name, "go.", 3) != 0 - && strncmp (mangled_name, "libgo_", 6) != 0) + if (!startswith (mangled_name, "go.") + && !startswith (mangled_name, "libgo_")) return NULL; /* Quick check for whether a search may be fruitful. */ @@ -381,12 +379,21 @@ go_demangle (const char *mangled_name, int options) } obstack_grow_str0 (&tempbuf, ""); - result = xstrdup (obstack_finish (&tempbuf)); + result = xstrdup ((const char *) obstack_finish (&tempbuf)); obstack_free (&tempbuf, NULL); xfree (name_buf); return result; } +/* la_sniff_from_mangled_name for Go. */ + +static int +go_sniff_from_mangled_name (const char *mangled, char **demangled) +{ + *demangled = go_demangle (mangled, 0); + return *demangled != NULL; +} + /* Given a Go symbol, return its package or NULL if unknown. Space for the result is malloc'd, caller must free. */ @@ -480,7 +487,7 @@ static const struct op_print go_op_print_tab[] = {"unsafe.Sizeof ", UNOP_SIZEOF, PREC_PREFIX, 0}, {"++", UNOP_POSTINCREMENT, PREC_SUFFIX, 0}, {"--", UNOP_POSTDECREMENT, PREC_SUFFIX, 0}, - {NULL, 0, 0, 0} + {NULL, OP_NULL, PREC_SUFFIX, 0} }; enum go_primitive_types { @@ -558,7 +565,7 @@ go_language_arch_info (struct gdbarch *gdbarch, lai->bool_type_default = builtin->builtin_bool; } -static const struct language_defn go_language_defn = +extern const struct language_defn go_language_defn = { "go", "Go", @@ -567,9 +574,9 @@ static const struct language_defn go_language_defn = case_sensitive_on, array_row_major, macro_expansion_no, + NULL, &exp_descriptor_c, go_parse, - go_error, null_post_parser, c_printchar, /* Print a character constant. */ c_printstr, /* Function to print string constant. */ @@ -582,23 +589,29 @@ static const struct language_defn go_language_defn = default_read_var_value, /* la_read_var_value */ NULL, /* Language specific skip_trampoline. */ NULL, /* name_of_this */ + false, /* la_store_sym_names_in_linkage_form_p */ basic_lookup_symbol_nonlocal, basic_lookup_transparent_type, go_demangle, /* Language specific symbol demangler. */ + go_sniff_from_mangled_name, NULL, /* Language specific class_name_from_physname. */ go_op_print_tab, /* Expression operators for printing. */ 1, /* C-style arrays. */ 0, /* String lower bound. */ default_word_break_characters, - default_make_symbol_completion_list, + default_collect_symbol_completion_matches, go_language_arch_info, default_print_array_index, default_pass_by_reference, c_get_string, - NULL, + c_watch_location_expression, + NULL, /* la_get_symbol_name_matcher */ iterate_over_symbols, + default_search_name_hash, &default_varobj_ops, + NULL, + NULL, LANG_MAGIC }; @@ -609,7 +622,7 @@ build_go_types (struct gdbarch *gdbarch) = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_go_type); builtin_go_type->builtin_void - = arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"); + = arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT, "void"); builtin_go_type->builtin_char = arch_character_type (gdbarch, 8, 1, "char"); builtin_go_type->builtin_bool @@ -637,9 +650,9 @@ build_go_types (struct gdbarch *gdbarch) builtin_go_type->builtin_uint64 = arch_integer_type (gdbarch, 64, 1, "uint64"); builtin_go_type->builtin_float32 - = arch_float_type (gdbarch, 32, "float32", NULL); + = arch_float_type (gdbarch, 32, "float32", floatformats_ieee_single); builtin_go_type->builtin_float64 - = arch_float_type (gdbarch, 64, "float64", NULL); + = arch_float_type (gdbarch, 64, "float64", floatformats_ieee_double); builtin_go_type->builtin_complex64 = arch_complex_type (gdbarch, "complex64", builtin_go_type->builtin_float32); @@ -655,15 +668,11 @@ static struct gdbarch_data *go_type_data; const struct builtin_go_type * builtin_go_type (struct gdbarch *gdbarch) { - return gdbarch_data (gdbarch, go_type_data); + return (const struct builtin_go_type *) gdbarch_data (gdbarch, go_type_data); } -extern initialize_file_ftype _initialize_go_language; - void _initialize_go_language (void) { go_type_data = gdbarch_data_register_post_init (build_go_types); - - add_language (&go_language_defn); }