Implement lazy FPU initialization for ravenscar
authorTom Tromey <tromey@adacore.com>
Wed, 4 May 2022 19:08:11 +0000 (13:08 -0600)
committerTom Tromey <tromey@adacore.com>
Tue, 14 Jun 2022 15:08:29 +0000 (09:08 -0600)
commit965b71a7f739a747c6b427a96b1fa9dd26e38956
treef4d7ba498e13bf6d548cda4a151fbbdd2b09eeee
parente73434e38f55e21cc33457ce3b218fa7b4592fec
Implement lazy FPU initialization for ravenscar

Some ravenscar runtimes implement lazy FPU handling.  On these
runtimes, the FPU is only initialized when a task tries to use it.
Furthermore, the FP registers aren't automatically saved on a task
switch -- instead, the save is deferred until the new task tries to
use the FPU.  Furthermore, each task's context area has a flag
indicating whether the FPU has been initialized for this task.

This patch teaches GDB to understand this implementation.  When
fetching or storing registers, GDB now checks to see whether the live
FP registers should be used.  If not, the task's saved FP registers
will be used if the task has caused FPU initialization.

Currently only AArch64 uses this code.  bb-runtimes implements this
for ARM as well, but GDB doesn't yet have an arm-ravenscar-thread.c.
gdb/aarch64-ravenscar-thread.c
gdb/ravenscar-thread.c
gdb/ravenscar-thread.h