From patchwork Wed Apr 27 02:49:31 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 11896 Received: (qmail 21186 invoked by alias); 27 Apr 2016 02:50:27 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 21016 invoked by uid 89); 27 Apr 2016 02:50:10 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=Maintenance, Settings, completing, pascal X-HELO: gproxy2-pub.mail.unifiedlayer.com Received: from gproxy2-pub.mail.unifiedlayer.com (HELO gproxy2-pub.mail.unifiedlayer.com) (69.89.18.3) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with SMTP; Wed, 27 Apr 2016 02:49:52 +0000 Received: (qmail 28583 invoked by uid 0); 27 Apr 2016 02:49:50 -0000 Received: from unknown (HELO cmgw3) (10.0.90.84) by gproxy2.mail.unifiedlayer.com with SMTP; 27 Apr 2016 02:49:50 -0000 Received: from box522.bluehost.com ([74.220.219.122]) by cmgw3 with id nMpk1s00L2f2jeq01MpnT3; Wed, 27 Apr 2016 03:49:47 -0600 X-Authority-Analysis: v=2.1 cv=Maz/5fPf c=1 sm=1 tr=0 a=GsOEXm/OWkKvwdLVJsfwcA==:117 a=GsOEXm/OWkKvwdLVJsfwcA==:17 a=L9H7d07YOLsA:10 a=9cW_t1CCXrUA:10 a=s5jvgZ67dGcA:10 a=PnD2wP_eR3oA:10 a=_v2sUkyEFrwA:10 a=kziv93cY1bsA:10 a=zstS-IiYAAAA:8 a=pGLkceISAAAA:8 a=ei4SEBeUAAAA:8 a=0FD05c-RAAAA:8 a=k9jJFD3RSiFWTSCk09cA:9 Received: from [71.215.116.141] (port=59324 helo=bapiya.Home) by box522.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.86_2) (envelope-from ) id 1avFXv-0002dx-Ef; Tue, 26 Apr 2016 20:49:47 -0600 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH 8/8] Add Rust documentation Date: Tue, 26 Apr 2016 20:49:31 -0600 Message-Id: <1461725371-17620-9-git-send-email-tom@tromey.com> In-Reply-To: <1461725371-17620-1-git-send-email-tom@tromey.com> References: <1461725371-17620-1-git-send-email-tom@tromey.com> X-Identified-User: {36111:box522.bluehost.com:elynrobi:tromey.com} {sentby:smtp auth 71.215.116.141 authed with tom+tromey.com} This patch adds documentation for the new Rust support in gdb. 2016-04-26 Tom Tromey * NEWS: Add Rust item. 2016-04-26 Tom Tromey * gdb.texinfo (Supported Languages): Mention Rust. Update menu. (Rust): New node. --- gdb/ChangeLog | 4 +++ gdb/NEWS | 5 +++ gdb/doc/ChangeLog | 5 +++ gdb/doc/gdb.texinfo | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 109 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bd19a64..3307b61 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,4 +1,8 @@ 2016-04-26 Tom Tromey + + * NEWS: Add Rust item. + +2016-04-26 Tom Tromey Manish Goregaokar * symtab.c (symbol_find_demangled_name): Handle Rust. diff --git a/gdb/NEWS b/gdb/NEWS index 7bf1e1a..5d31378 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -27,6 +27,11 @@ Bounds: [lower = 0x7fffffffc390, upper = 0x7fffffffc3a3] 0x0000000000400d7c in upper () at i386-mpx-sigsegv.c:68 +* Rust language support. + GDB now supports debugging programs written in the Rust programming + language. See https://www.rust-lang.org/ for more information about + Rust. + * New commands skip -file file diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 748a8e2..1803d3e 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,5 +1,10 @@ 2016-04-26 Tom Tromey + * gdb.texinfo (Supported Languages): Mention Rust. Update menu. + (Rust): New node. + +2016-04-26 Tom Tromey + * gdb.texinfo (Maintenance Commands): Document "maint selftest". 2016-04-13 Antoine Tremblay diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index f42c5f0..8c31c43 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -14398,7 +14398,7 @@ being set automatically by @value{GDBN}. @section Supported Languages @value{GDBN} supports C, C@t{++}, D, Go, Objective-C, Fortran, Java, -OpenCL C, Pascal, assembly, Modula-2, and Ada. +OpenCL C, Pascal, Rust, assembly, Modula-2, and Ada. @c This is false ... Some @value{GDBN} features may be used in expressions regardless of the language you use: the @value{GDBN} @code{@@} and @code{::} operators, @@ -14422,6 +14422,7 @@ language reference or tutorial. * OpenCL C:: OpenCL C * Fortran:: Fortran * Pascal:: Pascal +* Rust:: Rust * Modula-2:: Modula-2 * Ada:: Ada @end menu @@ -15227,6 +15228,99 @@ The Pascal-specific command @code{set print pascal_static-members} controls whether static members of Pascal objects are displayed. @xref{Print Settings, pascal_static-members}. +@node Rust +@subsection Rust + +@value{GDBN} supports the @url{https://www.rust-lang.org/, Rust +Programming Language}. Type- and value-printing, and expression +parsing, are reasonably complete. However, there are a few +peculiarities and holes to be aware of. + +@itemize @bullet +@item +Linespecs are never relative to the current crate. Instead, they act +as if there were a global namespace of crates, somewhat similar to the +way @code{extern crate} behaves. + +That is, if @value{GDBN} is stopped at a breakpoint in a function in +crate @samp{A}, module @samp{B}, then @code{break B::f} will attempt +to set a breakpoint in a function named @samp{f} in a crate named +@samp{B}. + +As a consequence of this approach, linespecs also cannot refer to +items using @samp{self::} or @samp{super::}. + +@item +Because @value{GDBN} implements Rust name-lookup semantics in +expressions, it will sometimes prepend the current crate to a name. +For example, if @value{GDBN} is stopped at a breakpoint in the crate +@samp{K}, then @code{print ::x::y} will try to find the symbol +@samp{K::x::y}. + +However, since it is useful to be able to refer to other crates when +debugging, @value{GDBN} provides the @code{extern} extension to +circumvent this. To use the extension, just put @code{extern} before +a path expression to refer to the otherwise unavailable ``global'' +scope. + +In the above example, if you wanted to refer to the symbol @samp{y} in +the crate @samp{x}, you would use @code{print extern x::y}. + +@item +The Rust expression evaluator does not support ``statement-like'' +expressions such as @code{if} or @code{match}, or lambda expressions. + +@item +Tuple expressions are not implemented. + +@item +The Rust expression evaluator does not currently implement the +@code{Drop} trait. Objects that may be created by the evaluator will +never be destroyed. + +@item +@value{GDBN} does not implment type inference for generics. In order +to call generic functions or otherwise refer to generic items, you +will have to specify the type parameters manually. + +@item +@value{GDBN} currently uses the C@t{++} demangler for Rust. In most +cases this does not cause any problems. However, in an expression +context, completing a generic function name will give syntactically +invalid results. This happens because Rust requires the @samp{::} +operator between the function name and its generic arguments. For +example, @value{GDBN} might provide a completion like +@code{crate::f}, where the parser would require +@code{crate::f::}. + +@item +As of this writing, the Rust compiler has a few holes in the debugging +information it generates. These holes prevent certain features from +being implemented by @value{GDBN}: +@itemize @bullet + +@item +Method calls cannot be made via traits. + +@item +Trait objects cannot be created or inspected. + +@item +Operator overloading is not implemented. + +@item +When debugging in a monomorphized function, you cannot use the generic +type names. + +@item +The type @code{Self} is not available. + +@item +@code{use} statements are not available, so some names may not be +available in the crate. +@end itemize +@end itemize + @node Modula-2 @subsection Modula-2