This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH 2/3] Testsuite: Rename "end()" to avoid libinproctrace C++ symbol clash
On 2018-03-16 03:47 PM, Andreas Arnez wrote:
> On Thu, Mar 15 2018, Simon Marchi wrote:
>
>> On 2018-03-14 12:11 PM, Andreas Arnez wrote:
>>> Some of GDB's trace test cases define a function end() and place a
>>> breakpoint there with "break end". However, when libinproctrace is linked
>>> to the binary, there are multiple methods named "end", such as
>>> std::string::end() from the C++ library or format_pieces::end() from
>>> common/format.h. GDB then creates multiple breakpoints instead of just a
>>> single one, and some FAILs result, such as these:
>>>
>>> FAIL: gdb.trace/trace-mt.exp: ftrace on: break end
>>> FAIL: gdb.trace/trace-mt.exp: ftrace off: break end
>>>
>>> This is fixed by renaming end() to my_end(). For consistency, where end()
>>> was paired with a previous begin(), the latter is renamed to my_begin() as
>>> well.
>>>
>>> gdb/testsuite/ChangeLog:
>>>
>>> * gdb.trace/trace-break.c (end): Rename to...
>>> (my_end): ...this.
>>> (main): Adjust call.
>>> * gdb.trace/trace-mt.c (end): Rename to...
>>> (my_end): ...this.
>>> (main): Adjust call.
>>> * gdb.trace/unavailable.cc (begin): Rename to...
>>> (my_begin): ...this.
>>> (end): Rename to...
>>> (my_end): ...this.
>>> (main): Adjust calls.
>>> * gdb.trace/trace-break.exp: Reflect function name change.
>>> * gdb.trace/trace-mt.exp: Likewise.
>>> * gdb.trace/unavailable.exp: Likewise.
>>
>> Hi Andreas,
>>
>> Another way would have been to pass "-qualified" to the break command,
>> or use gdb_breakpoint and pass the "qualified" arg. There are also
>> other instances of the same "problem" in tests that don't check the
>> output of the break command at all...
>>
>> gdb_test "break end" ".*" ""
>>
>> In any case, this patch LGTM.
>
> Hm, actually the use of "-qualified" is a good point. I'd rather go
> with that. How about the patch below?
>
> --
> Andreas
>
> -- >8 --
> Subject: [PATCH] Testsuite: Fix ambiguous "break" due to libinproctrace
>
> Some of GDB's trace test cases define a function end() and place a
> breakpoint there with "break end". However, when libinproctrace is linked
> to the binary, there are multiple methods named "end", such as
> std::string::end() from the C++ library or format_pieces::end() from
> common/format.h. GDB then creates multiple breakpoints instead of just a
> single one, and some FAILs result, such as these:
>
> FAIL: gdb.trace/trace-mt.exp: ftrace on: break end
> FAIL: gdb.trace/trace-mt.exp: ftrace off: break end
>
> Fix this by adding the "-qualified" option to the break commands. For
> consistency, change all occurrences of "break end" (and similar) in all
> trace test cases, even if the current behavior does not cause problems.
> Also, consequently use the gdb_breakpoint convenience proc.
>
> gdb/testsuite/ChangeLog:
>
> * gdb.trace/actions-changed.exp: Call gdb_breakpoint with the
> "qualified" option when setting breakpoints.
> * gdb.trace/backtrace.exp: Likewise.
> * gdb.trace/circ.exp: Likewise.
> * gdb.trace/collection.exp: Likewise.
> * gdb.trace/disconnected-tracing.exp: Likewise.
> * gdb.trace/ftrace-lock.exp: Likewise.
> * gdb.trace/ftrace.exp: Likewise.
> * gdb.trace/infotrace.exp: Likewise.
> * gdb.trace/packetlen.exp: Likewise.
> * gdb.trace/passc-dyn.exp: Likewise.
> * gdb.trace/qtro.exp: Likewise.
> * gdb.trace/read-memory.exp: Likewise.
> * gdb.trace/report.exp: Likewise.
> * gdb.trace/signal.exp: Likewise.
> * gdb.trace/status-stop.exp: Likewise.
> * gdb.trace/strace.exp: Likewise.
> * gdb.trace/tfind.exp: Likewise.
> * gdb.trace/trace-break.exp: Likewise.
> * gdb.trace/trace-condition.exp: Likewise.
> * gdb.trace/trace-mt.exp: Likewise.
> * gdb.trace/tstatus.exp: Likewise.
> * gdb.trace/tsv.exp: Likewise.
> * gdb.trace/unavailable-dwarf-piece.exp: Likewise.
> * gdb.trace/unavailable.exp: Likewise.
> * gdb.trace/while-dyn.exp: Likewise.
Hi Andreas,
Since the gdb_breakpoint proc accepts the multi-location printout, we may
not even need the "qualified", just using gdb_breakpoint would be sufficient.
But I think it's not bad either to use "qualified", as it makes the test more
robust. It makes sure the test doesn't stop on another random end function/method.
So this LGTM, thanks.
Simon