Exactly which escape sequences are emitted by gdb in TUI mode are
determined largely by the curses implementation.  Testing my latest
(as yet unsubmitted) series to refactor the TUI showed a couple of
failures that I tracked to the test suite's terminal implementation.
In particular, the CSI "@" sequence was not implemented; and the CSI
"X" sequence was implemented incorrectly.
This patch fixes both of these problems.  Tested on x86-64 Fedora 28.
gdb/testsuite/ChangeLog
2019-07-29  Tom Tromey  <tom@tromey.com>
	* lib/tuiterm.exp (Term::_csi_@): New proc.
	(Term::_csi_X): Don't move cursor.
+2019-07-29  Tom Tromey  <tom@tromey.com>
+
+       * lib/tuiterm.exp (Term::_csi_@): New proc.
+       (Term::_csi_X): Don't move cursor.
+
 2019-07-29  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
 
        * gdb.base/options.exp: Update backtrace - completion to
 
        set _cur_x 0
     }
 
+    # Make room for characters.
+    proc _csi_@ {args} {
+       set n [_default [lindex $args 0] 1]
+       variable _cur_x
+       variable _cur_y
+       variable _chars
+       set in_x $_cur_x
+       set out_x [expr {$_cur_x + $n}]
+       for {set i 0} {$i < $n} {incr i} {
+           set _chars($out_x,$_cur_y) $_chars($in_x,$_cur_y)
+           incr in_x
+           incr out_x
+       }
+    }
+
     # Cursor Up.
     proc _csi_A {args} {
        variable _cur_y
     # Erase chars.
     proc _csi_X {args} {
        set n [_default [lindex $args 0] 1]
-       _insert [string repeat " " $n]
+       # Erase characters but don't move cursor.
+       variable _cur_x
+       variable _cur_y
+       variable _attrs
+       variable _chars
+       set lattr [array get _attrs]
+       set x $_cur_x
+       for {set i 0} {$i < $n} {incr i} {
+           set _chars($x,$_cur_y) [list " " $lattr]
+           incr x
+       }
     }
 
     # Repeat.