info on "value being assigned to is no longer active" error

Siva Velusamy
2008-01-19T04:12:05Z

When writing to a register (msr) when the stack pointer or PC is
corrupt, gdb throws out the following error:

----
(gdb) p/x $rmsr
{ frame_register_unwind (frame=-1,regnum=33(rmsr),...) ->
*optimizedp=0 *lvalp=2 *addrp=0x84 *bufferp=[000000a0] }
{ get_frame_id (fi=0) { frame_func_unwind (fi=-1) -> 0x0 }
-> {!stack,!code,!special} }
$1 = 0xa0

(gdb) set $rmsr=0x0
{ frame_register_unwind (frame=-1,regnum=33(rmsr),...) ->
*optimizedp=0 *lvalp=2 *addrp=0x84 *bufferp=[000000a0] }
{ frame_id_p (l={!stack,!code,!special}) -> 0 }
Value being assigned to is no longer active.
-----

This sounds pretty similar to the issue reported here:
http://sourceware.org/ml/gdb/2005-05/msg00029.html

What I do not understand is why gdb is looking for a proper frame
before updating the register.

If my (admittedly cursory) examination of the code in valops.c is
correct, it appears as if gdb is looking for the frame to make sure
that it updates the value of the register if it has been stored in the
stack. Is that correct?

Thanks,
Siva
--
In the end, everything is a gag.
Charlie Chaplin