+2019-08-19 Tom Tromey <tom@tromey.com>
+
+ PR gdb/25009
+ * 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 <sergiodj@redhat.com>
PR breakpoints/24541
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`
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`
break;
case language_rust:
- /* Not handled by Source Highlight. */
- break;
+ return "rust.lang";
case language_ada:
return "ada.lang";
use-after-free. */
fullname = symtab_to_fullname (s);
}
- srchilite::SourceHighlight highlighter ("esc.outlang");
- highlighter.setStyleFile("esc.style");
+ try
+ {
+ srchilite::SourceHighlight highlighter ("esc.outlang");
+ highlighter.setStyleFile("esc.style");
- std::ostringstream output;
- highlighter.highlight (input, output, lang_name, fullname);
+ 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. */
+ }
}
}
}