diff options
author | Tom Tromey <tom@tromey.com> | 2016-04-26 19:38:08 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2016-05-17 12:02:00 -0600 |
commit | c44af4ebc000f606d16b42224cba2cfe80391d5c (patch) | |
tree | 73839883edc5c0bd6f744024802b30f0bdd7b0e3 /gdb/dwarf2read.c | |
parent | 00272ec4b0cc22c1b9d60d39ce7bf5b2d5512582 (diff) | |
download | gdb-c44af4ebc000f606d16b42224cba2cfe80391d5c.zip gdb-c44af4ebc000f606d16b42224cba2cfe80391d5c.tar.gz gdb-c44af4ebc000f606d16b42224cba2cfe80391d5c.tar.bz2 |
Add support for the Rust language
This patch adds support for the Rust language.
2016-05-17 Tom Tromey <tom@tromey.com>
Manish Goregaokar <manishsmail@gmail.com>
* symtab.c (symbol_find_demangled_name): Handle Rust.
* symfile.c (init_filename_language_table): Treat ".rs" as Rust.
* std-operator.def (STRUCTOP_ANONYMOUS, OP_RUST_ARRAY): New
constants.
* rust-lang.h: New file.
* rust-lang.c: New file.
* rust-exp.y: New file.
* dwarf2read.c (read_file_scope): Add Rust producer sniffing.
(dwarf2_compute_name, read_func_scope, read_structure_type)
(read_base_type, read_subrange_type, set_cu_language)
(new_symbol_full, determine_prefix): Handle Rust.
* defs.h (enum language) <language_rust>: New constant.
* Makefile.in (SFILES): Add rust-exp.y, rust-lang.c.
(COMMON_OBS): Add rust-exp.o, rust-lang.o.
2016-05-17 Tom Tromey <tom@tromey.com>
* gdb.base/default.exp (set language): Add rust.
Diffstat (limited to 'gdb/dwarf2read.c')
-rw-r--r-- | gdb/dwarf2read.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index f526619..7b794c4 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -8462,7 +8462,8 @@ dwarf2_compute_name (const char *name, /* These are the only languages we know how to qualify names in. */ if (name != NULL && (cu->language == language_cplus || cu->language == language_java - || cu->language == language_fortran || cu->language == language_d)) + || cu->language == language_fortran || cu->language == language_d + || cu->language == language_rust)) { if (die_needs_namespace (die, cu)) { @@ -11475,7 +11476,8 @@ read_func_scope (struct die_info *die, struct dwarf2_cu *cu) /* For C++, set the block's scope. */ if ((cu->language == language_cplus || cu->language == language_fortran - || cu->language == language_d) + || cu->language == language_d + || cu->language == language_rust) && cu->processing_has_namespace_info) block_set_scope (block, determine_prefix (die, cu), &objfile->objfile_obstack); @@ -13147,7 +13149,8 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu) { if (cu->language == language_cplus || cu->language == language_java - || cu->language == language_d) + || cu->language == language_d + || cu->language == language_rust) { const char *full_name = dwarf2_full_name (name, die, cu); @@ -14776,7 +14779,8 @@ read_base_type (struct die_info *die, struct dwarf2_cu *cu) case DW_ATE_unsigned_char: if (cu->language == language_ada || cu->language == language_m2 || cu->language == language_pascal - || cu->language == language_fortran) + || cu->language == language_fortran + || cu->language == language_rust) code = TYPE_CODE_CHAR; type_flags |= TYPE_FLAG_UNSIGNED; break; @@ -14950,6 +14954,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) case language_d: case language_java: case language_objc: + case language_rust: low.data.const_val = 0; low_default_is_valid = (cu->header.version >= 4); break; @@ -17038,6 +17043,10 @@ set_cu_language (unsigned int lang, struct dwarf2_cu *cu) case DW_LANG_ObjC: cu->language = language_objc; break; + case DW_LANG_Rust: + case DW_LANG_Rust_old: + cu->language = language_rust; + break; case DW_LANG_Cobol74: case DW_LANG_Cobol85: default: @@ -18601,7 +18610,8 @@ new_symbol_full (struct die_info *die, struct type *type, struct dwarf2_cu *cu, if (cu->language == language_cplus || cu->language == language_java || cu->language == language_ada - || cu->language == language_d) + || cu->language == language_d + || cu->language == language_rust) { /* The symbol's name is already allocated along with this objfile, so we don't need to @@ -19274,7 +19284,8 @@ determine_prefix (struct die_info *die, struct dwarf2_cu *cu) char *retval; if (cu->language != language_cplus && cu->language != language_java - && cu->language != language_fortran && cu->language != language_d) + && cu->language != language_fortran && cu->language != language_d + && cu->language != language_rust) return ""; retval = anonymous_struct_prefix (die, cu); |