one-too-many location in breakpoint

Maciej W. Rozycki macro@codesourcery.com
Thu Dec 8 18:56:00 GMT 2011


On Tue, 29 Nov 2011, Tom Tromey wrote:

> Tom> I fixed all the other problems.  I'm running a regression test to make
> Tom> sure I didn't make something else break while doing this.  If all goes
> Tom> well I will send out refreshed patches.
> 
> I needed a couple of test suite changes to account for the different
> output.  Otherwise all is well.
> 
> This includes a test addition for the iterate_over_symbols change.
> 
> I didn't write a new test for the "normal_menu" problem.

 Just as a heads-up, this has regressed on the mips-sde-elf target (both 
MIPS32 and MIPS16 multilibs) as follows:

break A::outer::foo  (char*)  const if (a == 3)
No symbol "a" in current context.
(gdb) FAIL: gdb.cp/ovsrch.exp: break A::outer::foo  (char*)  const if (a == 3)
break 'A::outer::foo  (char*)  const' if (a == 3)
No symbol "a" in current context.
(gdb) FAIL: gdb.cp/ovsrch.exp: break 'A::outer::foo  (char*)  const' if (a == 3)
[...]
break A::outer::foo  (int)  const if (a == 3)
No symbol "a" in current context.
(gdb) FAIL: gdb.cp/ovsrch.exp: break A::outer::foo  (int)  const if (a == 3)
break 'A::outer::foo  (int)  const' if (a == 3)
No symbol "a" in current context.
(gdb) FAIL: gdb.cp/ovsrch.exp: break 'A::outer::foo  (int)  const' if (a == 3)
[...]
break A::B::inner::foo  (char*)  const if (a == 3)
No symbol "a" in current context.
(gdb) FAIL: gdb.cp/ovsrch.exp: break A::B::inner::foo  (char*)  const if (a == 3)
break 'A::B::inner::foo  (char*)  const' if (a == 3)
No symbol "a" in current context.
(gdb) FAIL: gdb.cp/ovsrch.exp: break 'A::B::inner::foo  (char*)  const' if (a == 3)
[...]
break A::B::inner::foo  (int)  const if (a == 3)
No symbol "a" in current context.
(gdb) FAIL: gdb.cp/ovsrch.exp: break A::B::inner::foo  (int)  const if (a == 3)
break 'A::B::inner::foo  (int)  const' if (a == 3)
No symbol "a" in current context.
(gdb) FAIL: gdb.cp/ovsrch.exp: break 'A::B::inner::foo  (int)  const' if (a == 3)

No regressions on mips-linux-gnu though.

 This is SDE code:

800011e8 <A::stop_here()>:
800011e8:	27bdfff8 	addiu	sp,sp,-8
800011ec:	afbe0004 	sw	s8,4(sp)
800011f0:	03a0f021 	move	s8,sp
800011f4:	03c0e821 	move	sp,s8
800011f8:	8fbe0004 	lw	s8,4(sp)
800011fc:	27bd0008 	addiu	sp,sp,8
80001200:	03e00008 	jr	ra
80001204:	00000000 	nop

(breakpoint at 800011f4), and this is Linux code:

00400790 <A::stop_here()>:
  400790:	27bdfff8 	addiu	sp,sp,-8
  400794:	afbe0004 	sw	s8,4(sp)
  400798:	03a0f021 	move	s8,sp
  40079c:	03c0e821 	move	sp,s8
  4007a0:	8fbe0004 	lw	s8,4(sp)
  4007a4:	27bd0008 	addiu	sp,sp,8
  4007a8:	03e00008 	jr	ra
  4007ac:	00000000 	nop

(breakpoint at 40079c).  And I fail to see "a" being defined anywhere 
throughout gdb.cp/ovsrch*, so I am curious as to why it succeeds for any 
target (including mips-linux-gnu) in the first place.

 I can see you made this adjustment:

-    gdb_test "break ${class}::foo if (a == 3)" "Breakpoint (\[0-9\]).*"
+    gdb_test "break ${class}::hibob if (a_param == 3)" "Breakpoint

but there's this definition elsewhere in this test case:

    set conditional1 "if (a == 3)"

as well, that you have left intact.  Should it be adjusted accordingly?  
Why is this condition accepted for some targets and not for some others 
anyway?

 Thoughts?

  Maciej



More information about the Gdb-patches mailing list