Re: [PATCH 01/40] Make gdb.base/dmsym.exp independent of "set language ada"

Simon Marchi
2017-07-18T19:42:35Z

On 2017-06-02 14:21, Pedro Alves wrote:
> This test is using "set language ada" expecting that to cause GDB to
> do Ada symbol name matching. That won't work when GDB uses the
> symbol's language to decide which symbol matching algorithm to use,
> because the test's symbols are C symbols.
>
> So generalize the test a bit to not rely on Ada name matching rules.
>
> Confirmed that by undoing the original fix the test was written for,
> the test still fails.
>
> gdb/testsuite/ChangeLog:
>
> * gdb.base/dmsym.c (pck__foo__bar__minsym): Rename to ...
> (test_minsym): ... this, and make static.
> (get_pck__foo__bar__minsym): Rename to ...
> (get_test_minsym): ... this.
> * gdb.base/dmsym.exp (): Remove "set language ada" call. Adjust
> symbol names and comments.
> * gdb.base/dmsym_main.c (get_pck__foo__bar__minsym): Rename to ...
> (get_test_minsym): ... this.
> (pck__foo__bar__minsym__2): Rename to ...
> (test_minsym): ... this.
> (main): Adjust.
> ---
> gdb/testsuite/gdb.base/dmsym.c | 8 ++++----
> gdb/testsuite/gdb.base/dmsym.exp | 39
> +++++++++++++------------------------
> gdb/testsuite/gdb.base/dmsym_main.c | 10 +++++-----
> 3 files changed, 23 insertions(+), 34 deletions(-)
>
> diff --git a/gdb/testsuite/gdb.base/dmsym.c
> b/gdb/testsuite/gdb.base/dmsym.c
> index f358b51..dccea23 100644
> --- a/gdb/testsuite/gdb.base/dmsym.c
> +++ b/gdb/testsuite/gdb.base/dmsym.c
> @@ -15,11 +15,11 @@
> You should have received a copy of the GNU General Public License
> along with this program. If not, see
> <http://www.gnu.org/licenses/>. */
>
> -int pck__foo__bar__minsym = 123;
> +static int test_minsym = 123;
>
> int
> -get_pck__foo__bar__minsym (void)
> +get_test_minsym (void)
> {
> - pck__foo__bar__minsym++;
> - return pck__foo__bar__minsym;
> + test_minsym++;
> + return test_minsym;
> }
> diff --git a/gdb/testsuite/gdb.base/dmsym.exp
> b/gdb/testsuite/gdb.base/dmsym.exp
> index a318080..191a319 100644
> --- a/gdb/testsuite/gdb.base/dmsym.exp
> +++ b/gdb/testsuite/gdb.base/dmsym.exp
> @@ -44,42 +44,31 @@ clean_restart ${testfile}
> set num "\[0-9\]+"
> set addr "0x\[0-9a-zA-Z\]+"
>
> -# Although the test program is written in C, the original problem
> -# occurs only when the language is Ada. The use of a C program is
> -# only a convenience to be able to exercise the original problem
> -# without requiring an Ada compiler. In the meantime, temporarily
> -# force the language to Ada.
> -
> -gdb_test_no_output "set lang ada"
> -
> -# Verify that setting a breakpoint on `pck__foo__bar__minsym' only
> -# results in one location found (function pck__foo__bar__minsym__2).
> -# A mistake would be to also insert a breakpoint where
> -# pck__foo__bar__minsym is defined. Despite the fact that there is
> -# no debugging info available, this is a data symbol and thus should
> -# not be used for breakpoint purposes.
> -
> -gdb_test "break pck__foo__bar__minsym" \
> +# Verify that setting a breakpoint on `test_minsym' only results in
> +# one location found. A mistake would be to also insert a breakpoint
> +# in the test_minsym data symbol in dmsym.c. Despite the fact that
> +# there is no debugging info available, this is a data symbol and thus
> +# should not be used for breakpoint purposes.
> +
> +gdb_test "break test_minsym" \
> "Breakpoint $num at $addr.: file .*dmsym_main\\.c, line
> $num\\."
>
> # However, verify that the `info line' command, on the other hand,
> # finds both locations.
>
> -gdb_test "info line pck__foo__bar__minsym" \
> - "Line $num of \".*dmsym_main\\.c\" .*\r\nNo line number
> information available for address $addr <pck__foo__bar__minsym>"
> -
> -gdb_test_no_output "set lang auto"
> +gdb_test "info line test_minsym" \
> + "Line $num of \".*dmsym_main\\.c\" .*\r\nNo line number
> information available for address $addr <test_minsym>"
>
> -# Now, run the program until we get past the call to
> -# pck__foo__bar__minsym__2. Except when using hardware breakpoints,
> -# inferior behavior is going to be affected if a breakpoint was
> -# incorrectly inserted at pck__foo__bar__minsym.
> +# Now, run the program until we get past the call to test_minsym.
> +# Except when using hardware breakpoints, inferior behavior is going
> +# to be affected if a breakpoint was incorrectly inserted at
> +# test_minsym.
>
> gdb_breakpoint dmsym_main.c:[gdb_get_line_number "BREAK" dmsym_main.c]
>
> gdb_run_cmd
> gdb_test "" \
> - "Breakpoint $num, pck__foo__bar__minsym__2 \\(\\) at.*" \
> + "Breakpoint $num, test_minsym \\(\\) at.*" \
> "run until breakpoint at BREAK"
>
> gdb_test "continue" \
> diff --git a/gdb/testsuite/gdb.base/dmsym_main.c
> b/gdb/testsuite/gdb.base/dmsym_main.c
> index 99589b8..0338dc7 100644
> --- a/gdb/testsuite/gdb.base/dmsym_main.c
> +++ b/gdb/testsuite/gdb.base/dmsym_main.c
> @@ -15,18 +15,18 @@
> You should have received a copy of the GNU General Public License
> along with this program. If not, see
> <http://www.gnu.org/licenses/>. */
>
> -extern int get_pck__foo__bar__minsym (void);
> +extern int get_test_minsym (void);
>
> -int
> -pck__foo__bar__minsym__2 (void)
> +static int
> +test_minsym (void)
> {
> - return get_pck__foo__bar__minsym ();
> + return get_test_minsym ();
> }
>
> int
> main (void)
> {
> - int val = pck__foo__bar__minsym__2 ();
> + int val = test_minsym ();
>
> if (val != 124) /* BREAK */
> return 1;

I don't think anybody looked at this one, so I did. Looks good to me.

Simon