On 7 October 2015 at 14:03, Sabrina Souto wrote:
>>> Hi,
>>> I'm needing to analyze the execution flow of a test, but don't
>>> understand how the test drivers, e.g., gcc-dg.exp or dg.exp, access
>>> the source code of GCC. When a test starts, what is the first function
>>> that is called? How can I know that?
>>
>> The first function is main(), because the tests just run the compiler.
>> DejaGnu doesn't access the source code of GCC, it just runs the
>> compiler executable.
>
> OK, I understand. But when a test run the compiler, all compiler
> stages/phases are always executed?

No, only the stages requested by the dg-do directive.

> how the test knows the compiler
> stage must be run? from the "dg-do" actions (preprocess, compile,
> assemble, link, run)? how the "dg-do" actions are processed/performed?

That's initially handled by DejaGnu, not GCC. See the site-wide dg.exp
file (on my system that is /usr/share/dejagnu/dg.exp) which says:

# dg-do do-what-keyword [{ target/xfail selector }]
#       `do-what-keyword' is tool specific and is passed unchanged to
#       ${tool}-dg-test.  An example is gcc where `keyword' can be any of:
#       preprocess|compile|assemble|link|run
#       and will do one of: produce a .i, produce a .s, produce a .o,
#       produce an a.out, or produce an a.out and run it (the default is
#       compile).

So that passes the argument to the callback gcc-dg-test, which is
defined in gcc/testsuite/lib/gcc-dg.exp, and that sets the
'compile_type' variable to one of assemble, preprocess, link etc. and
sets the appropriate output filename for the action.

That is then translated into command-line options for the compiler, so
a 'compile' test will be run with -c, an 'assemble' test will be run
with -S, a 'link' test will have no special option (so all stages run)
and a 'run' test does the same as 'link' but also runs the executable.

Reply via email to