gdb/tui: avoid fp exception when applying layouts
authorAndrew Burgess <aburgess@redhat.com>
Tue, 1 Feb 2022 16:53:56 +0000 (16:53 +0000)
committerAndrew Burgess <aburgess@redhat.com>
Sun, 3 Apr 2022 14:31:46 +0000 (15:31 +0100)
commit47b8e12ffd0ecf924836aed55eb63b9e5d9e8ea1
treee7f2f9027d1d38f3983f2f2e0727d399906f17b9
parent80b2eb3c34c06bbd139216ad534e91e36a7eff10
gdb/tui: avoid fp exception when applying layouts

Consider:

  (gdb) tui enable
  (gdb) layout src
  (gdb) tui new-layout conly cmd 1
  (gdb) layout conly

After this, with current master, gdb crashes with a floating-point
exception.

The problem is that in tui_layout_split::apply, when we switch from
'src' to 'conly', we will try to retain the cmd window height.  As
such, the cmd window will become a fixed size window, which decreases
the available_size, but doesn't count towards the total_weight.

As the cmd window is the only window, the total_weight stays at zero,
and, when we move into step 2, where we attempt to size the windows,
we perform a divide by zero, and crash.

After this commit we avoid the divide by zero, and just directly set
the window size based on the fixed size.

There is still a problem after this commit, when the conly layout is
selected the cmd window retains its original height, which will only
be part of the terminal.  The rest of the terminal is left unused.
This issue will be addressed in a later commit, this commit is just
about the floating-point exception.
gdb/testsuite/gdb.tui/new-layout.exp
gdb/tui/tui-layout.c