Anyway, the question of what to do when the register's value can't be
found has been largely ignored. I'm thinking that throwing an error
would be a safer strategy - there is too much code ignoring register
fetches and I don't think we're going to be auditing it soon.
Indeed, GDB depends on the frame unwinder always returning a value for
its registers. However for the sake of printing variables stored in
registers it seems that setting OPTIMIZED_OUT makes sense if we know
for certain that a the register has been thrashed. It makes
valprint.c:value_print() print "<value optimized out>". The problem
with printing an error message from REGISTER_TO_VALUE() is keeping the
error messages uniform. However, in some cases it might be more
appropriate to print a warning instead of an error, for example if the
register hasn't been saved, but if we cannot tell whether it has been
thrashed yet.
However, I can live with the current status quo.