Re: [RFA] Ensure deterministic result order in gdb.ada/info_auto_lang.exp

Simon Marchi
2018-12-19T04:31:18Z

Adding Joel in CC so he has a chance to see this.

On 2018-12-01 8:38 a.m., Philippe Waroquiers wrote:
> standard_ada_testfile, standard_test_file and the explicit
> csrcfile assignment in info_auto_lang.exp all gives similar pathnames
> prefix for a source, such as
> /home/philippe/gdb/git/build_binutils-gdb/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.<something>.
>
> However, the gnat compiler normalizes Ada sources path when compiling.
> So, the 'Ada' .o object are referencing a pathname such as
> /home/philippe/gdb/git/binutils-gdb/gdb/testsuite/gdb.ada/info_auto_lang/proc_in_ada.adb,
> while the 'C' .o object still references the not normalized pathname.
>
> As the results of 'info functions | ...' are sorted by pathname first,
> the order of the results depends on the comparison between different directories,
> leading to results that can change depending on these directories.
>
> => Ensure the result order is always the same, by normalising the C source file.
>
> Tested by running the testcase in 2 different builds, that without normalize
> were giving different results.
>
> Note: such 'set csrcfile' is used in 4 other tests mixing Ada and C.
> If deemed better (Joel?), I can factorize building such a csrcfile
> and normalizing it in an ada.exp standard_csrcfile_for_ada function.
>
> gdb/testsuite/ChangeLog
> 2018-12-01 Philippe Waroquiers <philippe.waroquiers@skynet.be>
>
> * gdb.ada/info_auto_lang.exp: Normalize some_c source file.
> Update order of results accordingly.

I'd just like to clarify, because I don't think I see the same current behavior as you. When I
run the test without your patch applied, I see this output, for example:

83 info functions proc_in_^M
84 All functions matching regular expression "proc_in_":^M
85 ^M
86 File /home/simark/src/binutils-gdb/gdb/testsuite/gdb.ada/info_auto_lang/proc_in_ada.adb:^M
87 17: procedure proc_in_ada;^M
88 ^M
89 File /home/simark/src/binutils-gdb/gdb/testsuite/gdb.ada/info_auto_lang/some_c.c:^M
90 24: void proc_in_c(void);^M
91 (gdb) FAIL: gdb.ada/info_auto_lang.exp: language_choice=auto: frame=0, frame_lang=c: info functions proc_in_

If I understand correctly, in your case, you see the C source file as non-normalized? Note
that I also build out-of-tree.

Since both paths appear already normalized in my case, the test does fails for me and your patch
would fix it. I am 99% sure I am fine with your fix, I just want to make sure we are on the same
page.

About the other tests you mention, would it be important to normalize the paths there too, or
you suggest to do it just for consistency?

Simon

Simon