From patchwork Thu Sep 12 19:20:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 34518 Received: (qmail 88502 invoked by alias); 12 Sep 2019 19:20:34 -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 88487 invoked by uid 89); 12 Sep 2019 19:20:33 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.6 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS autolearn=ham version=3.3.1 spammy=summer X-HELO: mx1.suse.de Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 12 Sep 2019 19:20:26 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id A4D09ABB1; Thu, 12 Sep 2019 19:20:24 +0000 (UTC) Subject: Re: [PATCH v2 2/2] Add Rust support to source highlighting To: Tom Tromey Cc: gdb-patches@sourceware.org, Pedro Alves References: <20190727155155.32417-1-tom@tromey.com> <20190727155155.32417-3-tom@tromey.com> <332da42c-ae75-a148-221f-4f7bb815f40f@suse.de> <87v9u05en8.fsf@tromey.com> From: Tom de Vries Openpgp: preference=signencrypt Message-ID: Date: Thu, 12 Sep 2019 21:20:22 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <87v9u05en8.fsf@tromey.com> X-IsSubscribed: yes On 10-09-19 17:56, Tom Tromey wrote: >>>>>> "Tom" == Tom de Vries writes: > > Tom> I recently updated my regular build setup to include an installed > Tom> libsource-highlight.so by installing package libsource-highlight-devel > Tom> in openSUSE Leap 15.1. > ... > > Tom> So my question is: does it make sense to backport (part of) this patch > Tom> to 8.3? > > It would be fine by me. The configury bits would also be needed. So, commit c1a5d03a89 "Add --with-static-standard-libraries to the top level" applied cleanly, but commit d806ea2d0e "Add Rust support to source highlighting" didn't so I'd like a review of that one. Attached both backported patches here. Tested on openSUSE Leap 15.1, both with and without source-highlight package installed. OK for 8.3 branch? Thanks, - Tom Add Rust support to source highlighting [ Backport of master commit d806ea2d0e. ] Currently, no release of GNU Source Highlight supports Rust. However, I've checked in a patch to do so there, and I plan to make a new release sometime this summer. This patch prepares gdb for that by adding support for Rust to the source highlighting code. Because Source Highlight will throw an exception if the language is unrecognized, this also changes gdb to ignore exceptions here. This will cause gdb to fall back to un-highlighted source text. This updates gdb's configure script to reject the combination of Source Highlight and -static-libstdc++. This is done because it's not possible to use -static-libstdc++ and then catch exceptions from a shared library. Tested with the current and development versions of Source Highlight. gdb/ChangeLog 2019-08-19 Tom Tromey * configure: Rebuild. * configure.ac: Disallow the combination of -static-libstdc++ and source highlight. * source-cache.c (get_language_name): Handle rust. (source_cache::get_source_lines): Ignore highlighting exceptions. --- gdb/ChangeLog | 8 ++++++++ gdb/configure | 6 ++++++ gdb/configure.ac | 8 ++++++++ gdb/source-cache.c | 33 ++++++++++++++++++++++----------- 4 files changed, 44 insertions(+), 11 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index fd3a86cbcf..76fcda3ba7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2019-08-19 Tom Tromey + + * configure: Rebuild. + * configure.ac: Disallow the combination of -static-libstdc++ and + source highlight. + * source-cache.c (get_language_name): Handle rust. + (source_cache::get_source_lines): Ignore highlighting exceptions. + 2019-06-28 Sergio Durigan Junior PR breakpoints/24541 diff --git a/gdb/configure b/gdb/configure index 854837c50a..866564fbe6 100755 --- a/gdb/configure +++ b/gdb/configure @@ -11503,6 +11503,12 @@ $as_echo "no - pkg-config not found" >&6; } as_fn_error $? "pkg-config was not found in your system" "$LINENO" 5 fi else + case "$LDFLAGS" in + *static-libstdc*) + as_fn_error $? "source highlight is incompatible with -static-libstdc++; either use --disable-source-highlight or --without-static-standard-libraries" "$LINENO" 5 + ;; + esac + if ${pkg_config_prog_path} --exists source-highlight; then SRCHIGH_CFLAGS=`${pkg_config_prog_path} --cflags source-highlight` SRCHIGH_LIBS=`${pkg_config_prog_path} --libs source-highlight` diff --git a/gdb/configure.ac b/gdb/configure.ac index 1527585839..0805827adf 100644 --- a/gdb/configure.ac +++ b/gdb/configure.ac @@ -1251,6 +1251,14 @@ if test "${enable_source_highlight}" != "no"; then AC_MSG_ERROR([pkg-config was not found in your system]) fi else + case "$LDFLAGS" in + *static-libstdc*) + AC_MSG_ERROR([source highlight is incompatible with -static-libstdc++; dnl +either use --disable-source-highlight or dnl +--without-static-standard-libraries]) + ;; + esac + if ${pkg_config_prog_path} --exists source-highlight; then SRCHIGH_CFLAGS=`${pkg_config_prog_path} --cflags source-highlight` SRCHIGH_LIBS=`${pkg_config_prog_path} --libs source-highlight` diff --git a/gdb/source-cache.c b/gdb/source-cache.c index 5eae02082d..77f92879fd 100644 --- a/gdb/source-cache.c +++ b/gdb/source-cache.c @@ -156,8 +156,7 @@ get_language_name (enum language lang) break; case language_rust: - /* Not handled by Source Highlight. */ - break; + return "rust.lang"; case language_ada: return "ada.lang"; @@ -216,18 +215,30 @@ source_cache::get_source_lines (struct symtab *s, int first_line, srchilite::SourceHighlight highlighter ("esc.outlang"); highlighter.setStyleFile("esc.style"); - std::ostringstream output; - highlighter.highlight (input, output, lang_name, fullname); + try + { + std::ostringstream output; + highlighter.highlight (input, output, lang_name, fullname); - source_text result = { fullname, output.str () }; - m_source_map.push_back (std::move (result)); + source_text result = { fullname, output.str () }; + m_source_map.push_back (std::move (result)); - if (m_source_map.size () > MAX_ENTRIES) - m_source_map.erase (m_source_map.begin ()); + if (m_source_map.size () > MAX_ENTRIES) + m_source_map.erase (m_source_map.begin ()); - *lines = extract_lines (m_source_map.back (), first_line, - last_line); - return true; + *lines = extract_lines (m_source_map.back (), first_line, + last_line); + return true; + } + catch (...) + { + /* Source Highlight will throw an exception if + highlighting fails. One possible reason it can fail + is if the language is unknown -- which matters to gdb + because Rust support wasn't added until after 3.1.8. + Ignore exceptions here and fall back to + un-highlighted text. */ + } } } }