aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2019-06-24 16:02:47 -0600
committerTom Tromey <tromey@adacore.com>2019-08-19 10:17:27 -0600
commitd806ea2d0ef362fcddd2c1659f537b68aa114203 (patch)
tree98a15b8aa7aa4a70d552bb115a60a465478f8ec7
parentc1a5d03a89a455d79f025c66dce83342de4d26ce (diff)
downloadgdb-d806ea2d0ef362fcddd2c1659f537b68aa114203.zip
gdb-d806ea2d0ef362fcddd2c1659f537b68aa114203.tar.gz
gdb-d806ea2d0ef362fcddd2c1659f537b68aa114203.tar.bz2
Add Rust support to source highlighting
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 <tom@tromey.com> * 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.
-rw-r--r--gdb/ChangeLog8
-rwxr-xr-xgdb/configure6
-rw-r--r--gdb/configure.ac8
-rw-r--r--gdb/source-cache.c24
4 files changed, 39 insertions, 7 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index c43ee64..c654872 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,11 @@
+2019-08-19 Tom Tromey <tom@tromey.com>
+
+ * 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-08-16 Tom Tromey <tom@tromey.com>
* tui/tui.h (enum tui_win_type) <EXEC_INFO_WIN>: Remove.
diff --git a/gdb/configure b/gdb/configure
index 2832c83..cb71bbf 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -11326,6 +11326,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 0979109..5a18c16 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -1231,6 +1231,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 9039f8f..18e2be9 100644
--- a/gdb/source-cache.c
+++ b/gdb/source-cache.c
@@ -135,8 +135,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";
@@ -197,11 +196,22 @@ source_cache::ensure (struct symtab *s)
highlighter->setStyleFile ("esc.style");
}
- std::istringstream input (contents);
- std::ostringstream output;
- highlighter->highlight (input, output, lang_name, fullname);
-
- contents = output.str ();
+ try
+ {
+ std::istringstream input (contents);
+ std::ostringstream output;
+ highlighter->highlight (input, output, lang_name, fullname);
+ contents = output.str ();
+ }
+ 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. */
+ }
}
}
#endif /* HAVE_SOURCE_HIGHLIGHT */