This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC] Don't allow setting register in non-innermost frame


On Thu, 23 Aug 2012 18:24:46 +0200, Tom Tromey wrote:
> >>>>> "Doug" == Doug Evans <dje@google.com> writes:
> Doug> I *could* accept a warning when changing a register in a non-innermost
> Doug> frame, fwiw.
> 
> That would be ok by me.

I do not find correct even the warning.

It is absolutely normal user operation:

volatile int v = 42;
void __attribute__ ((noinline, noclone))
f (void)
{
  v++;
}
int
main (void)
{
  int i = v;
  f ();
  return i;
}
gcc-4.7.1-5.fc18.x86_64
gcc -Wall -g -O2
readelf -wio
 <2><61>: Abbrev Number: 4 (DW_TAG_variable)
    <62>   DW_AT_name        : i
    <6a>   DW_AT_location    : 0x0      (location list)
    Offset   Begin    End      Expression
    00000000 0000000000400407 000000000040040f (DW_OP_reg3 (rbx))
    00000000 000000000040040f 0000000000400410 (DW_OP_reg0 (rax))
    00000000 <End of list>

(gdb) b f
Breakpoint 1 at 0x400500: file 70.c, line 5.
(gdb) run
Breakpoint 1, f () at 70.c:5
(gdb) up
#1  0x000000000040040c in main () at 70.c:11
11	  f ();
(gdb) set variable i=20
warning: Assigning to register in non-innermost frame.

Why?

I would find correct to print such warning for:
	(gdb) set $rbx=20
There it should happen only if user has explicitly specified the register
itself.

Also I would find more appropriate to call 'query' in such case but that is
a nitpick.


Thanks,
Jan


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]