1 |
284 |
jeremybenn |
@c Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
|
2 |
|
|
@c Free Software Foundation, Inc.
|
3 |
|
|
@c This is part of the GCC manual.
|
4 |
|
|
@c For copying conditions, see the file gcc.texi.
|
5 |
|
|
|
6 |
|
|
@node Source Tree
|
7 |
|
|
@chapter Source Tree Structure and Build System
|
8 |
|
|
|
9 |
|
|
This chapter describes the structure of the GCC source tree, and how
|
10 |
|
|
GCC is built. The user documentation for building and installing GCC
|
11 |
|
|
is in a separate manual (@uref{http://gcc.gnu.org/install/}), with
|
12 |
|
|
which it is presumed that you are familiar.
|
13 |
|
|
|
14 |
|
|
@menu
|
15 |
|
|
* Configure Terms:: Configuration terminology and history.
|
16 |
|
|
* Top Level:: The top level source directory.
|
17 |
|
|
* gcc Directory:: The @file{gcc} subdirectory.
|
18 |
|
|
@end menu
|
19 |
|
|
|
20 |
|
|
@include configterms.texi
|
21 |
|
|
|
22 |
|
|
@node Top Level
|
23 |
|
|
@section Top Level Source Directory
|
24 |
|
|
|
25 |
|
|
The top level source directory in a GCC distribution contains several
|
26 |
|
|
files and directories that are shared with other software
|
27 |
|
|
distributions such as that of GNU Binutils. It also contains several
|
28 |
|
|
subdirectories that contain parts of GCC and its runtime libraries:
|
29 |
|
|
|
30 |
|
|
@table @file
|
31 |
|
|
@item boehm-gc
|
32 |
|
|
The Boehm conservative garbage collector, used as part of the Java
|
33 |
|
|
runtime library.
|
34 |
|
|
|
35 |
|
|
@item config
|
36 |
|
|
Autoconf macros and Makefile fragments used throughout the tree.
|
37 |
|
|
|
38 |
|
|
@item contrib
|
39 |
|
|
Contributed scripts that may be found useful in conjunction with GCC@.
|
40 |
|
|
One of these, @file{contrib/texi2pod.pl}, is used to generate man
|
41 |
|
|
pages from Texinfo manuals as part of the GCC build process.
|
42 |
|
|
|
43 |
|
|
@item fixincludes
|
44 |
|
|
The support for fixing system headers to work with GCC@. See
|
45 |
|
|
@file{fixincludes/README} for more information. The headers fixed by
|
46 |
|
|
this mechanism are installed in @file{@var{libsubdir}/include-fixed}.
|
47 |
|
|
Along with those headers, @file{README-fixinc} is also installed, as
|
48 |
|
|
@file{@var{libsubdir}/include-fixed/README}.
|
49 |
|
|
|
50 |
|
|
@item gcc
|
51 |
|
|
The main sources of GCC itself (except for runtime libraries),
|
52 |
|
|
including optimizers, support for different target architectures,
|
53 |
|
|
language front ends, and testsuites. @xref{gcc Directory, , The
|
54 |
|
|
@file{gcc} Subdirectory}, for details.
|
55 |
|
|
|
56 |
|
|
@item gnattools
|
57 |
|
|
Support tools for GNAT.
|
58 |
|
|
|
59 |
|
|
@item include
|
60 |
|
|
Headers for the @code{libiberty} library.
|
61 |
|
|
|
62 |
|
|
@item intl
|
63 |
|
|
GNU @code{libintl}, from GNU @code{gettext}, for systems which do not
|
64 |
|
|
include it in @code{libc}.
|
65 |
|
|
|
66 |
|
|
@item libada
|
67 |
|
|
The Ada runtime library.
|
68 |
|
|
|
69 |
|
|
@item libcpp
|
70 |
|
|
The C preprocessor library.
|
71 |
|
|
|
72 |
|
|
@item libdecnumber
|
73 |
|
|
The Decimal Float support library.
|
74 |
|
|
|
75 |
|
|
@item libffi
|
76 |
|
|
The @code{libffi} library, used as part of the Java runtime library.
|
77 |
|
|
|
78 |
|
|
@item libgcc
|
79 |
|
|
The GCC runtime library.
|
80 |
|
|
|
81 |
|
|
@item libgfortran
|
82 |
|
|
The Fortran runtime library.
|
83 |
|
|
|
84 |
|
|
@item libgomp
|
85 |
|
|
The GNU OpenMP runtime library.
|
86 |
|
|
|
87 |
|
|
@item libiberty
|
88 |
|
|
The @code{libiberty} library, used for portability and for some
|
89 |
|
|
generally useful data structures and algorithms. @xref{Top, ,
|
90 |
|
|
Introduction, libiberty, @sc{gnu} libiberty}, for more information
|
91 |
|
|
about this library.
|
92 |
|
|
|
93 |
|
|
@item libjava
|
94 |
|
|
The Java runtime library.
|
95 |
|
|
|
96 |
|
|
@item libmudflap
|
97 |
|
|
The @code{libmudflap} library, used for instrumenting pointer and array
|
98 |
|
|
dereferencing operations.
|
99 |
|
|
|
100 |
|
|
@item libobjc
|
101 |
|
|
The Objective-C and Objective-C++ runtime library.
|
102 |
|
|
|
103 |
|
|
@item libssp
|
104 |
|
|
The Stack protector runtime library.
|
105 |
|
|
|
106 |
|
|
@item libstdc++-v3
|
107 |
|
|
The C++ runtime library.
|
108 |
|
|
|
109 |
|
|
@item lto-plugin
|
110 |
|
|
Plugin used by @command{gold} if link-time optimizations are enabled.
|
111 |
|
|
|
112 |
|
|
@item maintainer-scripts
|
113 |
|
|
Scripts used by the @code{gccadmin} account on @code{gcc.gnu.org}.
|
114 |
|
|
|
115 |
|
|
@item zlib
|
116 |
|
|
The @code{zlib} compression library, used by the Java front end, as
|
117 |
|
|
part of the Java runtime library, and for compressing and uncompressing
|
118 |
|
|
GCC's intermediate language in LTO object files.
|
119 |
|
|
@end table
|
120 |
|
|
|
121 |
|
|
The build system in the top level directory, including how recursion
|
122 |
|
|
into subdirectories works and how building runtime libraries for
|
123 |
|
|
multilibs is handled, is documented in a separate manual, included
|
124 |
|
|
with GNU Binutils. @xref{Top, , GNU configure and build system,
|
125 |
|
|
configure, The GNU configure and build system}, for details.
|
126 |
|
|
|
127 |
|
|
@node gcc Directory
|
128 |
|
|
@section The @file{gcc} Subdirectory
|
129 |
|
|
|
130 |
|
|
The @file{gcc} directory contains many files that are part of the C
|
131 |
|
|
sources of GCC, other files used as part of the configuration and
|
132 |
|
|
build process, and subdirectories including documentation and a
|
133 |
|
|
testsuite. The files that are sources of GCC are documented in a
|
134 |
|
|
separate chapter. @xref{Passes, , Passes and Files of the Compiler}.
|
135 |
|
|
|
136 |
|
|
@menu
|
137 |
|
|
* Subdirectories:: Subdirectories of @file{gcc}.
|
138 |
|
|
* Configuration:: The configuration process, and the files it uses.
|
139 |
|
|
* Build:: The build system in the @file{gcc} directory.
|
140 |
|
|
* Makefile:: Targets in @file{gcc/Makefile}.
|
141 |
|
|
* Library Files:: Library source files and headers under @file{gcc/}.
|
142 |
|
|
* Headers:: Headers installed by GCC.
|
143 |
|
|
* Documentation:: Building documentation in GCC.
|
144 |
|
|
* Front End:: Anatomy of a language front end.
|
145 |
|
|
* Back End:: Anatomy of a target back end.
|
146 |
|
|
@end menu
|
147 |
|
|
|
148 |
|
|
@node Subdirectories
|
149 |
|
|
@subsection Subdirectories of @file{gcc}
|
150 |
|
|
|
151 |
|
|
The @file{gcc} directory contains the following subdirectories:
|
152 |
|
|
|
153 |
|
|
@table @file
|
154 |
|
|
@item @var{language}
|
155 |
|
|
Subdirectories for various languages. Directories containing a file
|
156 |
|
|
@file{config-lang.in} are language subdirectories. The contents of
|
157 |
|
|
the subdirectories @file{cp} (for C++), @file{lto} (for LTO),
|
158 |
|
|
@file{objc} (for Objective-C) and @file{objcp} (for Objective-C++) are
|
159 |
|
|
documented in this manual (@pxref{Passes, , Passes and Files of the
|
160 |
|
|
Compiler}); those for other languages are not. @xref{Front End, ,
|
161 |
|
|
Anatomy of a Language Front End}, for details of the files in these
|
162 |
|
|
directories.
|
163 |
|
|
|
164 |
|
|
@item config
|
165 |
|
|
Configuration files for supported architectures and operating
|
166 |
|
|
systems. @xref{Back End, , Anatomy of a Target Back End}, for
|
167 |
|
|
details of the files in this directory.
|
168 |
|
|
|
169 |
|
|
@item doc
|
170 |
|
|
Texinfo documentation for GCC, together with automatically generated
|
171 |
|
|
man pages and support for converting the installation manual to
|
172 |
|
|
HTML@. @xref{Documentation}.
|
173 |
|
|
|
174 |
|
|
@item ginclude
|
175 |
|
|
System headers installed by GCC, mainly those required by the C
|
176 |
|
|
standard of freestanding implementations. @xref{Headers, , Headers
|
177 |
|
|
Installed by GCC}, for details of when these and other headers are
|
178 |
|
|
installed.
|
179 |
|
|
|
180 |
|
|
@item po
|
181 |
|
|
Message catalogs with translations of messages produced by GCC into
|
182 |
|
|
various languages, @file{@var{language}.po}. This directory also
|
183 |
|
|
contains @file{gcc.pot}, the template for these message catalogues,
|
184 |
|
|
@file{exgettext}, a wrapper around @command{gettext} to extract the
|
185 |
|
|
messages from the GCC sources and create @file{gcc.pot}, which is run
|
186 |
|
|
by @samp{make gcc.pot}, and @file{EXCLUDES}, a list of files from
|
187 |
|
|
which messages should not be extracted.
|
188 |
|
|
|
189 |
|
|
@item testsuite
|
190 |
|
|
The GCC testsuites (except for those for runtime libraries).
|
191 |
|
|
@xref{Testsuites}.
|
192 |
|
|
@end table
|
193 |
|
|
|
194 |
|
|
@node Configuration
|
195 |
|
|
@subsection Configuration in the @file{gcc} Directory
|
196 |
|
|
|
197 |
|
|
The @file{gcc} directory is configured with an Autoconf-generated
|
198 |
|
|
script @file{configure}. The @file{configure} script is generated
|
199 |
|
|
from @file{configure.ac} and @file{aclocal.m4}. From the files
|
200 |
|
|
@file{configure.ac} and @file{acconfig.h}, Autoheader generates the
|
201 |
|
|
file @file{config.in}. The file @file{cstamp-h.in} is used as a
|
202 |
|
|
timestamp.
|
203 |
|
|
|
204 |
|
|
@menu
|
205 |
|
|
* Config Fragments:: Scripts used by @file{configure}.
|
206 |
|
|
* System Config:: The @file{config.build}, @file{config.host}, and
|
207 |
|
|
@file{config.gcc} files.
|
208 |
|
|
* Configuration Files:: Files created by running @file{configure}.
|
209 |
|
|
@end menu
|
210 |
|
|
|
211 |
|
|
@node Config Fragments
|
212 |
|
|
@subsubsection Scripts Used by @file{configure}
|
213 |
|
|
|
214 |
|
|
@file{configure} uses some other scripts to help in its work:
|
215 |
|
|
|
216 |
|
|
@itemize @bullet
|
217 |
|
|
@item The standard GNU @file{config.sub} and @file{config.guess}
|
218 |
|
|
files, kept in the top level directory, are used.
|
219 |
|
|
|
220 |
|
|
@item The file @file{config.gcc} is used to handle configuration
|
221 |
|
|
specific to the particular target machine. The file
|
222 |
|
|
@file{config.build} is used to handle configuration specific to the
|
223 |
|
|
particular build machine. The file @file{config.host} is used to handle
|
224 |
|
|
configuration specific to the particular host machine. (In general,
|
225 |
|
|
these should only be used for features that cannot reasonably be tested in
|
226 |
|
|
Autoconf feature tests.)
|
227 |
|
|
@xref{System Config, , The @file{config.build}; @file{config.host};
|
228 |
|
|
and @file{config.gcc} Files}, for details of the contents of these files.
|
229 |
|
|
|
230 |
|
|
@item Each language subdirectory has a file
|
231 |
|
|
@file{@var{language}/config-lang.in} that is used for
|
232 |
|
|
front-end-specific configuration. @xref{Front End Config, , The Front
|
233 |
|
|
End @file{config-lang.in} File}, for details of this file.
|
234 |
|
|
|
235 |
|
|
@item A helper script @file{configure.frag} is used as part of
|
236 |
|
|
creating the output of @file{configure}.
|
237 |
|
|
@end itemize
|
238 |
|
|
|
239 |
|
|
@node System Config
|
240 |
|
|
@subsubsection The @file{config.build}; @file{config.host}; and @file{config.gcc} Files
|
241 |
|
|
|
242 |
|
|
The @file{config.build} file contains specific rules for particular systems
|
243 |
|
|
which GCC is built on. This should be used as rarely as possible, as the
|
244 |
|
|
behavior of the build system can always be detected by autoconf.
|
245 |
|
|
|
246 |
|
|
The @file{config.host} file contains specific rules for particular systems
|
247 |
|
|
which GCC will run on. This is rarely needed.
|
248 |
|
|
|
249 |
|
|
The @file{config.gcc} file contains specific rules for particular systems
|
250 |
|
|
which GCC will generate code for. This is usually needed.
|
251 |
|
|
|
252 |
|
|
Each file has a list of the shell variables it sets, with descriptions, at the
|
253 |
|
|
top of the file.
|
254 |
|
|
|
255 |
|
|
FIXME: document the contents of these files, and what variables should
|
256 |
|
|
be set to control build, host and target configuration.
|
257 |
|
|
|
258 |
|
|
@include configfiles.texi
|
259 |
|
|
|
260 |
|
|
@node Build
|
261 |
|
|
@subsection Build System in the @file{gcc} Directory
|
262 |
|
|
|
263 |
|
|
FIXME: describe the build system, including what is built in what
|
264 |
|
|
stages. Also list the various source files that are used in the build
|
265 |
|
|
process but aren't source files of GCC itself and so aren't documented
|
266 |
|
|
below (@pxref{Passes}).
|
267 |
|
|
|
268 |
|
|
@include makefile.texi
|
269 |
|
|
|
270 |
|
|
@node Library Files
|
271 |
|
|
@subsection Library Source Files and Headers under the @file{gcc} Directory
|
272 |
|
|
|
273 |
|
|
FIXME: list here, with explanation, all the C source files and headers
|
274 |
|
|
under the @file{gcc} directory that aren't built into the GCC
|
275 |
|
|
executable but rather are part of runtime libraries and object files,
|
276 |
|
|
such as @file{crtstuff.c} and @file{unwind-dw2.c}. @xref{Headers, ,
|
277 |
|
|
Headers Installed by GCC}, for more information about the
|
278 |
|
|
@file{ginclude} directory.
|
279 |
|
|
|
280 |
|
|
@node Headers
|
281 |
|
|
@subsection Headers Installed by GCC
|
282 |
|
|
|
283 |
|
|
In general, GCC expects the system C library to provide most of the
|
284 |
|
|
headers to be used with it. However, GCC will fix those headers if
|
285 |
|
|
necessary to make them work with GCC, and will install some headers
|
286 |
|
|
required of freestanding implementations. These headers are installed
|
287 |
|
|
in @file{@var{libsubdir}/include}. Headers for non-C runtime
|
288 |
|
|
libraries are also installed by GCC; these are not documented here.
|
289 |
|
|
(FIXME: document them somewhere.)
|
290 |
|
|
|
291 |
|
|
Several of the headers GCC installs are in the @file{ginclude}
|
292 |
|
|
directory. These headers, @file{iso646.h},
|
293 |
|
|
@file{stdarg.h}, @file{stdbool.h}, and @file{stddef.h},
|
294 |
|
|
are installed in @file{@var{libsubdir}/include},
|
295 |
|
|
unless the target Makefile fragment (@pxref{Target Fragment})
|
296 |
|
|
overrides this by setting @code{USER_H}.
|
297 |
|
|
|
298 |
|
|
In addition to these headers and those generated by fixing system
|
299 |
|
|
headers to work with GCC, some other headers may also be installed in
|
300 |
|
|
@file{@var{libsubdir}/include}. @file{config.gcc} may set
|
301 |
|
|
@code{extra_headers}; this specifies additional headers under
|
302 |
|
|
@file{config} to be installed on some systems.
|
303 |
|
|
|
304 |
|
|
GCC installs its own version of @code{<float.h>}, from @file{ginclude/float.h}.
|
305 |
|
|
This is done to cope with command-line options that change the
|
306 |
|
|
representation of floating point numbers.
|
307 |
|
|
|
308 |
|
|
GCC also installs its own version of @code{<limits.h>}; this is generated
|
309 |
|
|
from @file{glimits.h}, together with @file{limitx.h} and
|
310 |
|
|
@file{limity.h} if the system also has its own version of
|
311 |
|
|
@code{<limits.h>}. (GCC provides its own header because it is
|
312 |
|
|
required of ISO C freestanding implementations, but needs to include
|
313 |
|
|
the system header from its own header as well because other standards
|
314 |
|
|
such as POSIX specify additional values to be defined in
|
315 |
|
|
@code{<limits.h>}.) The system's @code{<limits.h>} header is used via
|
316 |
|
|
@file{@var{libsubdir}/include/syslimits.h}, which is copied from
|
317 |
|
|
@file{gsyslimits.h} if it does not need fixing to work with GCC; if it
|
318 |
|
|
needs fixing, @file{syslimits.h} is the fixed copy.
|
319 |
|
|
|
320 |
|
|
GCC can also install @code{<tgmath.h>}. It will do this when
|
321 |
|
|
@file{config.gcc} sets @code{use_gcc_tgmath} to @code{yes}.
|
322 |
|
|
|
323 |
|
|
@node Documentation
|
324 |
|
|
@subsection Building Documentation
|
325 |
|
|
|
326 |
|
|
The main GCC documentation is in the form of manuals in Texinfo
|
327 |
|
|
format. These are installed in Info format; DVI versions may be
|
328 |
|
|
generated by @samp{make dvi}, PDF versions by @samp{make pdf}, and
|
329 |
|
|
HTML versions by @samp{make html}. In addition, some man pages are
|
330 |
|
|
generated from the Texinfo manuals, there are some other text files
|
331 |
|
|
with miscellaneous documentation, and runtime libraries have their own
|
332 |
|
|
documentation outside the @file{gcc} directory. FIXME: document the
|
333 |
|
|
documentation for runtime libraries somewhere.
|
334 |
|
|
|
335 |
|
|
@menu
|
336 |
|
|
* Texinfo Manuals:: GCC manuals in Texinfo format.
|
337 |
|
|
* Man Page Generation:: Generating man pages from Texinfo manuals.
|
338 |
|
|
* Miscellaneous Docs:: Miscellaneous text files with documentation.
|
339 |
|
|
@end menu
|
340 |
|
|
|
341 |
|
|
@node Texinfo Manuals
|
342 |
|
|
@subsubsection Texinfo Manuals
|
343 |
|
|
|
344 |
|
|
The manuals for GCC as a whole, and the C and C++ front ends, are in
|
345 |
|
|
files @file{doc/*.texi}. Other front ends have their own manuals in
|
346 |
|
|
files @file{@var{language}/*.texi}. Common files
|
347 |
|
|
@file{doc/include/*.texi} are provided which may be included in
|
348 |
|
|
multiple manuals; the following files are in @file{doc/include}:
|
349 |
|
|
|
350 |
|
|
@table @file
|
351 |
|
|
@item fdl.texi
|
352 |
|
|
The GNU Free Documentation License.
|
353 |
|
|
@item funding.texi
|
354 |
|
|
The section ``Funding Free Software''.
|
355 |
|
|
@item gcc-common.texi
|
356 |
|
|
Common definitions for manuals.
|
357 |
|
|
@item gpl.texi
|
358 |
|
|
@itemx gpl_v3.texi
|
359 |
|
|
The GNU General Public License.
|
360 |
|
|
@item texinfo.tex
|
361 |
|
|
A copy of @file{texinfo.tex} known to work with the GCC manuals.
|
362 |
|
|
@end table
|
363 |
|
|
|
364 |
|
|
DVI-formatted manuals are generated by @samp{make dvi}, which uses
|
365 |
|
|
@command{texi2dvi} (via the Makefile macro @code{$(TEXI2DVI)}).
|
366 |
|
|
PDF-formatted manuals are generated by @samp{make pdf}, which uses
|
367 |
|
|
@command{texi2pdf} (via the Makefile macro @code{$(TEXI2PDF)}). HTML
|
368 |
|
|
formatted manuals are generated by @samp{make html}. Info
|
369 |
|
|
manuals are generated by @samp{make info} (which is run as part of
|
370 |
|
|
a bootstrap); this generates the manuals in the source directory,
|
371 |
|
|
using @command{makeinfo} via the Makefile macro @code{$(MAKEINFO)},
|
372 |
|
|
and they are included in release distributions.
|
373 |
|
|
|
374 |
|
|
Manuals are also provided on the GCC web site, in both HTML and
|
375 |
|
|
PostScript forms. This is done via the script
|
376 |
|
|
@file{maintainer-scripts/update_web_docs}. Each manual to be
|
377 |
|
|
provided online must be listed in the definition of @code{MANUALS} in
|
378 |
|
|
that file; a file @file{@var{name}.texi} must only appear once in the
|
379 |
|
|
source tree, and the output manual must have the same name as the
|
380 |
|
|
source file. (However, other Texinfo files, included in manuals but
|
381 |
|
|
not themselves the root files of manuals, may have names that appear
|
382 |
|
|
more than once in the source tree.) The manual file
|
383 |
|
|
@file{@var{name}.texi} should only include other files in its own
|
384 |
|
|
directory or in @file{doc/include}. HTML manuals will be generated by
|
385 |
|
|
@samp{makeinfo --html}, PostScript manuals by @command{texi2dvi}
|
386 |
|
|
and @command{dvips}, and PDF manuals by @command{texi2pdf}.
|
387 |
|
|
All Texinfo files that are parts of manuals must
|
388 |
|
|
be version-controlled, even if they are generated files, for the
|
389 |
|
|
generation of online manuals to work.
|
390 |
|
|
|
391 |
|
|
The installation manual, @file{doc/install.texi}, is also provided on
|
392 |
|
|
the GCC web site. The HTML version is generated by the script
|
393 |
|
|
@file{doc/install.texi2html}.
|
394 |
|
|
|
395 |
|
|
@node Man Page Generation
|
396 |
|
|
@subsubsection Man Page Generation
|
397 |
|
|
|
398 |
|
|
Because of user demand, in addition to full Texinfo manuals, man pages
|
399 |
|
|
are provided which contain extracts from those manuals. These man
|
400 |
|
|
pages are generated from the Texinfo manuals using
|
401 |
|
|
@file{contrib/texi2pod.pl} and @command{pod2man}. (The man page for
|
402 |
|
|
@command{g++}, @file{cp/g++.1}, just contains a @samp{.so} reference
|
403 |
|
|
to @file{gcc.1}, but all the other man pages are generated from
|
404 |
|
|
Texinfo manuals.)
|
405 |
|
|
|
406 |
|
|
Because many systems may not have the necessary tools installed to
|
407 |
|
|
generate the man pages, they are only generated if the
|
408 |
|
|
@file{configure} script detects that recent enough tools are
|
409 |
|
|
installed, and the Makefiles allow generating man pages to fail
|
410 |
|
|
without aborting the build. Man pages are also included in release
|
411 |
|
|
distributions. They are generated in the source directory.
|
412 |
|
|
|
413 |
|
|
Magic comments in Texinfo files starting @samp{@@c man} control what
|
414 |
|
|
parts of a Texinfo file go into a man page. Only a subset of Texinfo
|
415 |
|
|
is supported by @file{texi2pod.pl}, and it may be necessary to add
|
416 |
|
|
support for more Texinfo features to this script when generating new
|
417 |
|
|
man pages. To improve the man page output, some special Texinfo
|
418 |
|
|
macros are provided in @file{doc/include/gcc-common.texi} which
|
419 |
|
|
@file{texi2pod.pl} understands:
|
420 |
|
|
|
421 |
|
|
@table @code
|
422 |
|
|
@item @@gcctabopt
|
423 |
|
|
Use in the form @samp{@@table @@gcctabopt} for tables of options,
|
424 |
|
|
where for printed output the effect of @samp{@@code} is better than
|
425 |
|
|
that of @samp{@@option} but for man page output a different effect is
|
426 |
|
|
wanted.
|
427 |
|
|
@item @@gccoptlist
|
428 |
|
|
Use for summary lists of options in manuals.
|
429 |
|
|
@item @@gol
|
430 |
|
|
Use at the end of each line inside @samp{@@gccoptlist}. This is
|
431 |
|
|
necessary to avoid problems with differences in how the
|
432 |
|
|
@samp{@@gccoptlist} macro is handled by different Texinfo formatters.
|
433 |
|
|
@end table
|
434 |
|
|
|
435 |
|
|
FIXME: describe the @file{texi2pod.pl} input language and magic
|
436 |
|
|
comments in more detail.
|
437 |
|
|
|
438 |
|
|
@node Miscellaneous Docs
|
439 |
|
|
@subsubsection Miscellaneous Documentation
|
440 |
|
|
|
441 |
|
|
In addition to the formal documentation that is installed by GCC,
|
442 |
|
|
there are several other text files in the @file{gcc} subdirectory
|
443 |
|
|
with miscellaneous documentation:
|
444 |
|
|
|
445 |
|
|
@table @file
|
446 |
|
|
@item ABOUT-GCC-NLS
|
447 |
|
|
Notes on GCC's Native Language Support. FIXME: this should be part of
|
448 |
|
|
this manual rather than a separate file.
|
449 |
|
|
@item ABOUT-NLS
|
450 |
|
|
Notes on the Free Translation Project.
|
451 |
|
|
@item COPYING
|
452 |
|
|
@itemx COPYING3
|
453 |
|
|
The GNU General Public License, Versions 2 and 3.
|
454 |
|
|
@item COPYING.LIB
|
455 |
|
|
@itemx COPYING3.LIB
|
456 |
|
|
The GNU Lesser General Public License, Versions 2.1 and 3.
|
457 |
|
|
@item *ChangeLog*
|
458 |
|
|
@itemx */ChangeLog*
|
459 |
|
|
Change log files for various parts of GCC@.
|
460 |
|
|
@item LANGUAGES
|
461 |
|
|
Details of a few changes to the GCC front-end interface. FIXME: the
|
462 |
|
|
information in this file should be part of general documentation of
|
463 |
|
|
the front-end interface in this manual.
|
464 |
|
|
@item ONEWS
|
465 |
|
|
Information about new features in old versions of GCC@. (For recent
|
466 |
|
|
versions, the information is on the GCC web site.)
|
467 |
|
|
@item README.Portability
|
468 |
|
|
Information about portability issues when writing code in GCC@. FIXME:
|
469 |
|
|
why isn't this part of this manual or of the GCC Coding Conventions?
|
470 |
|
|
@end table
|
471 |
|
|
|
472 |
|
|
FIXME: document such files in subdirectories, at least @file{config},
|
473 |
|
|
@file{cp}, @file{objc}, @file{testsuite}.
|
474 |
|
|
|
475 |
|
|
@node Front End
|
476 |
|
|
@subsection Anatomy of a Language Front End
|
477 |
|
|
|
478 |
|
|
A front end for a language in GCC has the following parts:
|
479 |
|
|
|
480 |
|
|
@itemize @bullet
|
481 |
|
|
@item
|
482 |
|
|
A directory @file{@var{language}} under @file{gcc} containing source
|
483 |
|
|
files for that front end. @xref{Front End Directory, , The Front End
|
484 |
|
|
@file{@var{language}} Directory}, for details.
|
485 |
|
|
@item
|
486 |
|
|
A mention of the language in the list of supported languages in
|
487 |
|
|
@file{gcc/doc/install.texi}.
|
488 |
|
|
@item
|
489 |
|
|
A mention of the name under which the language's runtime library is
|
490 |
|
|
recognized by @option{--enable-shared=@var{package}} in the
|
491 |
|
|
documentation of that option in @file{gcc/doc/install.texi}.
|
492 |
|
|
@item
|
493 |
|
|
A mention of any special prerequisites for building the front end in
|
494 |
|
|
the documentation of prerequisites in @file{gcc/doc/install.texi}.
|
495 |
|
|
@item
|
496 |
|
|
Details of contributors to that front end in
|
497 |
|
|
@file{gcc/doc/contrib.texi}. If the details are in that front end's
|
498 |
|
|
own manual then there should be a link to that manual's list in
|
499 |
|
|
@file{contrib.texi}.
|
500 |
|
|
@item
|
501 |
|
|
Information about support for that language in
|
502 |
|
|
@file{gcc/doc/frontends.texi}.
|
503 |
|
|
@item
|
504 |
|
|
Information about standards for that language, and the front end's
|
505 |
|
|
support for them, in @file{gcc/doc/standards.texi}. This may be a
|
506 |
|
|
link to such information in the front end's own manual.
|
507 |
|
|
@item
|
508 |
|
|
Details of source file suffixes for that language and @option{-x
|
509 |
|
|
@var{lang}} options supported, in @file{gcc/doc/invoke.texi}.
|
510 |
|
|
@item
|
511 |
|
|
Entries in @code{default_compilers} in @file{gcc.c} for source file
|
512 |
|
|
suffixes for that language.
|
513 |
|
|
@item
|
514 |
|
|
Preferably testsuites, which may be under @file{gcc/testsuite} or
|
515 |
|
|
runtime library directories. FIXME: document somewhere how to write
|
516 |
|
|
testsuite harnesses.
|
517 |
|
|
@item
|
518 |
|
|
Probably a runtime library for the language, outside the @file{gcc}
|
519 |
|
|
directory. FIXME: document this further.
|
520 |
|
|
@item
|
521 |
|
|
Details of the directories of any runtime libraries in
|
522 |
|
|
@file{gcc/doc/sourcebuild.texi}.
|
523 |
|
|
@item
|
524 |
|
|
Check targets in @file{Makefile.def} for the top-level @file{Makefile}
|
525 |
|
|
to check just the compiler or the compiler and runtime library for the
|
526 |
|
|
language.
|
527 |
|
|
@end itemize
|
528 |
|
|
|
529 |
|
|
If the front end is added to the official GCC source repository, the
|
530 |
|
|
following are also necessary:
|
531 |
|
|
|
532 |
|
|
@itemize @bullet
|
533 |
|
|
@item
|
534 |
|
|
At least one Bugzilla component for bugs in that front end and runtime
|
535 |
|
|
libraries. This category needs to be mentioned in
|
536 |
|
|
@file{gcc/gccbug.in}, as well as being added to the Bugzilla database.
|
537 |
|
|
@item
|
538 |
|
|
Normally, one or more maintainers of that front end listed in
|
539 |
|
|
@file{MAINTAINERS}.
|
540 |
|
|
@item
|
541 |
|
|
Mentions on the GCC web site in @file{index.html} and
|
542 |
|
|
@file{frontends.html}, with any relevant links on
|
543 |
|
|
@file{readings.html}. (Front ends that are not an official part of
|
544 |
|
|
GCC may also be listed on @file{frontends.html}, with relevant links.)
|
545 |
|
|
@item
|
546 |
|
|
A news item on @file{index.html}, and possibly an announcement on the
|
547 |
|
|
@email{gcc-announce@@gcc.gnu.org} mailing list.
|
548 |
|
|
@item
|
549 |
|
|
The front end's manuals should be mentioned in
|
550 |
|
|
@file{maintainer-scripts/update_web_docs} (@pxref{Texinfo Manuals})
|
551 |
|
|
and the online manuals should be linked to from
|
552 |
|
|
@file{onlinedocs/index.html}.
|
553 |
|
|
@item
|
554 |
|
|
Any old releases or CVS repositories of the front end, before its
|
555 |
|
|
inclusion in GCC, should be made available on the GCC FTP site
|
556 |
|
|
@uref{ftp://gcc.gnu.org/pub/gcc/old-releases/}.
|
557 |
|
|
@item
|
558 |
|
|
The release and snapshot script @file{maintainer-scripts/gcc_release}
|
559 |
|
|
should be updated to generate appropriate tarballs for this front end.
|
560 |
|
|
The associated @file{maintainer-scripts/snapshot-README} and
|
561 |
|
|
@file{maintainer-scripts/snapshot-index.html} files should be updated
|
562 |
|
|
to list the tarballs and diffs for this front end.
|
563 |
|
|
@item
|
564 |
|
|
If this front end includes its own version files that include the
|
565 |
|
|
current date, @file{maintainer-scripts/update_version} should be
|
566 |
|
|
updated accordingly.
|
567 |
|
|
@end itemize
|
568 |
|
|
|
569 |
|
|
@menu
|
570 |
|
|
* Front End Directory:: The front end @file{@var{language}} directory.
|
571 |
|
|
* Front End Config:: The front end @file{config-lang.in} file.
|
572 |
|
|
* Front End Makefile:: The front end @file{Make-lang.in} file.
|
573 |
|
|
@end menu
|
574 |
|
|
|
575 |
|
|
@node Front End Directory
|
576 |
|
|
@subsubsection The Front End @file{@var{language}} Directory
|
577 |
|
|
|
578 |
|
|
A front end @file{@var{language}} directory contains the source files
|
579 |
|
|
of that front end (but not of any runtime libraries, which should be
|
580 |
|
|
outside the @file{gcc} directory). This includes documentation, and
|
581 |
|
|
possibly some subsidiary programs built alongside the front end.
|
582 |
|
|
Certain files are special and other parts of the compiler depend on
|
583 |
|
|
their names:
|
584 |
|
|
|
585 |
|
|
@table @file
|
586 |
|
|
@item config-lang.in
|
587 |
|
|
This file is required in all language subdirectories. @xref{Front End
|
588 |
|
|
Config, , The Front End @file{config-lang.in} File}, for details of
|
589 |
|
|
its contents
|
590 |
|
|
@item Make-lang.in
|
591 |
|
|
This file is required in all language subdirectories. @xref{Front End
|
592 |
|
|
Makefile, , The Front End @file{Make-lang.in} File}, for details of its
|
593 |
|
|
contents.
|
594 |
|
|
@item lang.opt
|
595 |
|
|
This file registers the set of switches that the front end accepts on
|
596 |
|
|
the command line, and their @option{--help} text. @xref{Options}.
|
597 |
|
|
@item lang-specs.h
|
598 |
|
|
This file provides entries for @code{default_compilers} in
|
599 |
|
|
@file{gcc.c} which override the default of giving an error that a
|
600 |
|
|
compiler for that language is not installed.
|
601 |
|
|
@item @var{language}-tree.def
|
602 |
|
|
This file, which need not exist, defines any language-specific tree
|
603 |
|
|
codes.
|
604 |
|
|
@end table
|
605 |
|
|
|
606 |
|
|
@node Front End Config
|
607 |
|
|
@subsubsection The Front End @file{config-lang.in} File
|
608 |
|
|
|
609 |
|
|
Each language subdirectory contains a @file{config-lang.in} file. In
|
610 |
|
|
addition the main directory contains @file{c-config-lang.in}, which
|
611 |
|
|
contains limited information for the C language. This file is a shell
|
612 |
|
|
script that may define some variables describing the language:
|
613 |
|
|
|
614 |
|
|
@table @code
|
615 |
|
|
@item language
|
616 |
|
|
This definition must be present, and gives the name of the language
|
617 |
|
|
for some purposes such as arguments to @option{--enable-languages}.
|
618 |
|
|
@item lang_requires
|
619 |
|
|
If defined, this variable lists (space-separated) language front ends
|
620 |
|
|
other than C that this front end requires to be enabled (with the
|
621 |
|
|
names given being their @code{language} settings). For example, the
|
622 |
|
|
Java front end depends on the C++ front end, so sets
|
623 |
|
|
@samp{lang_requires=c++}.
|
624 |
|
|
@item subdir_requires
|
625 |
|
|
If defined, this variable lists (space-separated) front end directories
|
626 |
|
|
other than C that this front end requires to be present. For example,
|
627 |
|
|
the Objective-C++ front end uses source files from the C++ and
|
628 |
|
|
Objective-C front ends, so sets @samp{subdir_requires="cp objc"}.
|
629 |
|
|
@item target_libs
|
630 |
|
|
If defined, this variable lists (space-separated) targets in the top
|
631 |
|
|
level @file{Makefile} to build the runtime libraries for this
|
632 |
|
|
language, such as @code{target-libobjc}.
|
633 |
|
|
@item lang_dirs
|
634 |
|
|
If defined, this variable lists (space-separated) top level
|
635 |
|
|
directories (parallel to @file{gcc}), apart from the runtime libraries,
|
636 |
|
|
that should not be configured if this front end is not built.
|
637 |
|
|
@item build_by_default
|
638 |
|
|
If defined to @samp{no}, this language front end is not built unless
|
639 |
|
|
enabled in a @option{--enable-languages} argument. Otherwise, front
|
640 |
|
|
ends are built by default, subject to any special logic in
|
641 |
|
|
@file{configure.ac} (as is present to disable the Ada front end if the
|
642 |
|
|
Ada compiler is not already installed).
|
643 |
|
|
@item boot_language
|
644 |
|
|
If defined to @samp{yes}, this front end is built in stage1 of the
|
645 |
|
|
bootstrap. This is only relevant to front ends written in their own
|
646 |
|
|
languages.
|
647 |
|
|
@item compilers
|
648 |
|
|
If defined, a space-separated list of compiler executables that will
|
649 |
|
|
be run by the driver. The names here will each end
|
650 |
|
|
with @samp{\$(exeext)}.
|
651 |
|
|
@item outputs
|
652 |
|
|
If defined, a space-separated list of files that should be generated
|
653 |
|
|
by @file{configure} substituting values in them. This mechanism can
|
654 |
|
|
be used to create a file @file{@var{language}/Makefile} from
|
655 |
|
|
@file{@var{language}/Makefile.in}, but this is deprecated, building
|
656 |
|
|
everything from the single @file{gcc/Makefile} is preferred.
|
657 |
|
|
@item gtfiles
|
658 |
|
|
If defined, a space-separated list of files that should be scanned by
|
659 |
|
|
@file{gengtype.c} to generate the garbage collection tables and routines for
|
660 |
|
|
this language. This excludes the files that are common to all front
|
661 |
|
|
ends. @xref{Type Information}.
|
662 |
|
|
|
663 |
|
|
@end table
|
664 |
|
|
|
665 |
|
|
@node Front End Makefile
|
666 |
|
|
@subsubsection The Front End @file{Make-lang.in} File
|
667 |
|
|
|
668 |
|
|
Each language subdirectory contains a @file{Make-lang.in} file. It contains
|
669 |
|
|
targets @code{@var{lang}.@var{hook}} (where @code{@var{lang}} is the
|
670 |
|
|
setting of @code{language} in @file{config-lang.in}) for the following
|
671 |
|
|
values of @code{@var{hook}}, and any other Makefile rules required to
|
672 |
|
|
build those targets (which may if necessary use other Makefiles
|
673 |
|
|
specified in @code{outputs} in @file{config-lang.in}, although this is
|
674 |
|
|
deprecated). It also adds any testsuite targets that can use the
|
675 |
|
|
standard rule in @file{gcc/Makefile.in} to the variable
|
676 |
|
|
@code{lang_checks}.
|
677 |
|
|
|
678 |
|
|
@table @code
|
679 |
|
|
@itemx all.cross
|
680 |
|
|
@itemx start.encap
|
681 |
|
|
@itemx rest.encap
|
682 |
|
|
FIXME: exactly what goes in each of these targets?
|
683 |
|
|
@item tags
|
684 |
|
|
Build an @command{etags} @file{TAGS} file in the language subdirectory
|
685 |
|
|
in the source tree.
|
686 |
|
|
@item info
|
687 |
|
|
Build info documentation for the front end, in the build directory.
|
688 |
|
|
This target is only called by @samp{make bootstrap} if a suitable
|
689 |
|
|
version of @command{makeinfo} is available, so does not need to check
|
690 |
|
|
for this, and should fail if an error occurs.
|
691 |
|
|
@item dvi
|
692 |
|
|
Build DVI documentation for the front end, in the build directory.
|
693 |
|
|
This should be done using @code{$(TEXI2DVI)}, with appropriate
|
694 |
|
|
@option{-I} arguments pointing to directories of included files.
|
695 |
|
|
@item pdf
|
696 |
|
|
Build PDF documentation for the front end, in the build directory.
|
697 |
|
|
This should be done using @code{$(TEXI2PDF)}, with appropriate
|
698 |
|
|
@option{-I} arguments pointing to directories of included files.
|
699 |
|
|
@item html
|
700 |
|
|
Build HTML documentation for the front end, in the build directory.
|
701 |
|
|
@item man
|
702 |
|
|
Build generated man pages for the front end from Texinfo manuals
|
703 |
|
|
(@pxref{Man Page Generation}), in the build directory. This target
|
704 |
|
|
is only called if the necessary tools are available, but should ignore
|
705 |
|
|
errors so as not to stop the build if errors occur; man pages are
|
706 |
|
|
optional and the tools involved may be installed in a broken way.
|
707 |
|
|
@item install-common
|
708 |
|
|
Install everything that is part of the front end, apart from the
|
709 |
|
|
compiler executables listed in @code{compilers} in
|
710 |
|
|
@file{config-lang.in}.
|
711 |
|
|
@item install-info
|
712 |
|
|
Install info documentation for the front end, if it is present in the
|
713 |
|
|
source directory. This target should have dependencies on info files
|
714 |
|
|
that should be installed.
|
715 |
|
|
@item install-man
|
716 |
|
|
Install man pages for the front end. This target should ignore
|
717 |
|
|
errors.
|
718 |
|
|
@item install-plugin
|
719 |
|
|
Install headers needed for plugins.
|
720 |
|
|
@item srcextra
|
721 |
|
|
Copies its dependencies into the source directory. This generally should
|
722 |
|
|
be used for generated files such as Bison output files which are not
|
723 |
|
|
version-controlled, but should be included in any release tarballs. This
|
724 |
|
|
target will be executed during a bootstrap if
|
725 |
|
|
@samp{--enable-generated-files-in-srcdir} was specified as a
|
726 |
|
|
@file{configure} option.
|
727 |
|
|
@item srcinfo
|
728 |
|
|
@itemx srcman
|
729 |
|
|
Copies its dependencies into the source directory. These targets will be
|
730 |
|
|
executed during a bootstrap if @samp{--enable-generated-files-in-srcdir}
|
731 |
|
|
was specified as a @file{configure} option.
|
732 |
|
|
@item uninstall
|
733 |
|
|
Uninstall files installed by installing the compiler. This is
|
734 |
|
|
currently documented not to be supported, so the hook need not do
|
735 |
|
|
anything.
|
736 |
|
|
@item mostlyclean
|
737 |
|
|
@itemx clean
|
738 |
|
|
@itemx distclean
|
739 |
|
|
@itemx maintainer-clean
|
740 |
|
|
The language parts of the standard GNU
|
741 |
|
|
@samp{*clean} targets. @xref{Standard Targets, , Standard Targets for
|
742 |
|
|
Users, standards, GNU Coding Standards}, for details of the standard
|
743 |
|
|
targets. For GCC, @code{maintainer-clean} should delete
|
744 |
|
|
all generated files in the source directory that are not version-controlled,
|
745 |
|
|
but should not delete anything that is.
|
746 |
|
|
@end table
|
747 |
|
|
|
748 |
|
|
@file{Make-lang.in} must also define a variable @code{@var{lang}_OBJS}
|
749 |
|
|
to a list of host object files that are used by that language.
|
750 |
|
|
|
751 |
|
|
@node Back End
|
752 |
|
|
@subsection Anatomy of a Target Back End
|
753 |
|
|
|
754 |
|
|
A back end for a target architecture in GCC has the following parts:
|
755 |
|
|
|
756 |
|
|
@itemize @bullet
|
757 |
|
|
@item
|
758 |
|
|
A directory @file{@var{machine}} under @file{gcc/config}, containing a
|
759 |
|
|
machine description @file{@var{machine}.md} file (@pxref{Machine Desc,
|
760 |
|
|
, Machine Descriptions}), header files @file{@var{machine}.h} and
|
761 |
|
|
@file{@var{machine}-protos.h} and a source file @file{@var{machine}.c}
|
762 |
|
|
(@pxref{Target Macros, , Target Description Macros and Functions}),
|
763 |
|
|
possibly a target Makefile fragment @file{t-@var{machine}}
|
764 |
|
|
(@pxref{Target Fragment, , The Target Makefile Fragment}), and maybe
|
765 |
|
|
some other files. The names of these files may be changed from the
|
766 |
|
|
defaults given by explicit specifications in @file{config.gcc}.
|
767 |
|
|
@item
|
768 |
|
|
If necessary, a file @file{@var{machine}-modes.def} in the
|
769 |
|
|
@file{@var{machine}} directory, containing additional machine modes to
|
770 |
|
|
represent condition codes. @xref{Condition Code}, for further details.
|
771 |
|
|
@item
|
772 |
|
|
An optional @file{@var{machine}.opt} file in the @file{@var{machine}}
|
773 |
|
|
directory, containing a list of target-specific options. You can also
|
774 |
|
|
add other option files using the @code{extra_options} variable in
|
775 |
|
|
@file{config.gcc}. @xref{Options}.
|
776 |
|
|
@item
|
777 |
|
|
Entries in @file{config.gcc} (@pxref{System Config, , The
|
778 |
|
|
@file{config.gcc} File}) for the systems with this target
|
779 |
|
|
architecture.
|
780 |
|
|
@item
|
781 |
|
|
Documentation in @file{gcc/doc/invoke.texi} for any command-line
|
782 |
|
|
options supported by this target (@pxref{Run-time Target, , Run-time
|
783 |
|
|
Target Specification}). This means both entries in the summary table
|
784 |
|
|
of options and details of the individual options.
|
785 |
|
|
@item
|
786 |
|
|
Documentation in @file{gcc/doc/extend.texi} for any target-specific
|
787 |
|
|
attributes supported (@pxref{Target Attributes, , Defining
|
788 |
|
|
target-specific uses of @code{__attribute__}}), including where the
|
789 |
|
|
same attribute is already supported on some targets, which are
|
790 |
|
|
enumerated in the manual.
|
791 |
|
|
@item
|
792 |
|
|
Documentation in @file{gcc/doc/extend.texi} for any target-specific
|
793 |
|
|
pragmas supported.
|
794 |
|
|
@item
|
795 |
|
|
Documentation in @file{gcc/doc/extend.texi} of any target-specific
|
796 |
|
|
built-in functions supported.
|
797 |
|
|
@item
|
798 |
|
|
Documentation in @file{gcc/doc/extend.texi} of any target-specific
|
799 |
|
|
format checking styles supported.
|
800 |
|
|
@item
|
801 |
|
|
Documentation in @file{gcc/doc/md.texi} of any target-specific
|
802 |
|
|
constraint letters (@pxref{Machine Constraints, , Constraints for
|
803 |
|
|
Particular Machines}).
|
804 |
|
|
@item
|
805 |
|
|
A note in @file{gcc/doc/contrib.texi} under the person or people who
|
806 |
|
|
contributed the target support.
|
807 |
|
|
@item
|
808 |
|
|
Entries in @file{gcc/doc/install.texi} for all target triplets
|
809 |
|
|
supported with this target architecture, giving details of any special
|
810 |
|
|
notes about installation for this target, or saying that there are no
|
811 |
|
|
special notes if there are none.
|
812 |
|
|
@item
|
813 |
|
|
Possibly other support outside the @file{gcc} directory for runtime
|
814 |
|
|
libraries. FIXME: reference docs for this. The @code{libstdc++} porting
|
815 |
|
|
manual needs to be installed as info for this to work, or to be a
|
816 |
|
|
chapter of this manual.
|
817 |
|
|
@end itemize
|
818 |
|
|
|
819 |
|
|
If the back end is added to the official GCC source repository, the
|
820 |
|
|
following are also necessary:
|
821 |
|
|
|
822 |
|
|
@itemize @bullet
|
823 |
|
|
@item
|
824 |
|
|
An entry for the target architecture in @file{readings.html} on the
|
825 |
|
|
GCC web site, with any relevant links.
|
826 |
|
|
@item
|
827 |
|
|
Details of the properties of the back end and target architecture in
|
828 |
|
|
@file{backends.html} on the GCC web site.
|
829 |
|
|
@item
|
830 |
|
|
A news item about the contribution of support for that target
|
831 |
|
|
architecture, in @file{index.html} on the GCC web site.
|
832 |
|
|
@item
|
833 |
|
|
Normally, one or more maintainers of that target listed in
|
834 |
|
|
@file{MAINTAINERS}. Some existing architectures may be unmaintained,
|
835 |
|
|
but it would be unusual to add support for a target that does not have
|
836 |
|
|
a maintainer when support is added.
|
837 |
|
|
@end itemize
|
838 |
|
|
|
839 |
|
|
@node Testsuites
|
840 |
|
|
@chapter Testsuites
|
841 |
|
|
|
842 |
|
|
GCC contains several testsuites to help maintain compiler quality.
|
843 |
|
|
Most of the runtime libraries and language front ends in GCC have
|
844 |
|
|
testsuites. Currently only the C language testsuites are documented
|
845 |
|
|
here; FIXME: document the others.
|
846 |
|
|
|
847 |
|
|
@menu
|
848 |
|
|
* Test Idioms:: Idioms used in testsuite code.
|
849 |
|
|
* Test Directives:: Directives used within DejaGnu tests.
|
850 |
|
|
* Ada Tests:: The Ada language testsuites.
|
851 |
|
|
* C Tests:: The C language testsuites.
|
852 |
|
|
* libgcj Tests:: The Java library testsuites.
|
853 |
|
|
* LTO Testing:: Support for testing link-time optimizations.
|
854 |
|
|
* gcov Testing:: Support for testing gcov.
|
855 |
|
|
* profopt Testing:: Support for testing profile-directed optimizations.
|
856 |
|
|
* compat Testing:: Support for testing binary compatibility.
|
857 |
|
|
* Torture Tests:: Support for torture testing using multiple options.
|
858 |
|
|
@end menu
|
859 |
|
|
|
860 |
|
|
@node Test Idioms
|
861 |
|
|
@section Idioms Used in Testsuite Code
|
862 |
|
|
|
863 |
|
|
In general, C testcases have a trailing @file{-@var{n}.c}, starting
|
864 |
|
|
with @file{-1.c}, in case other testcases with similar names are added
|
865 |
|
|
later. If the test is a test of some well-defined feature, it should
|
866 |
|
|
have a name referring to that feature such as
|
867 |
|
|
@file{@var{feature}-1.c}. If it does not test a well-defined feature
|
868 |
|
|
but just happens to exercise a bug somewhere in the compiler, and a
|
869 |
|
|
bug report has been filed for this bug in the GCC bug database,
|
870 |
|
|
@file{pr@var{bug-number}-1.c} is the appropriate form of name.
|
871 |
|
|
Otherwise (for miscellaneous bugs not filed in the GCC bug database),
|
872 |
|
|
and previously more generally, test cases are named after the date on
|
873 |
|
|
which they were added. This allows people to tell at a glance whether
|
874 |
|
|
a test failure is because of a recently found bug that has not yet
|
875 |
|
|
been fixed, or whether it may be a regression, but does not give any
|
876 |
|
|
other information about the bug or where discussion of it may be
|
877 |
|
|
found. Some other language testsuites follow similar conventions.
|
878 |
|
|
|
879 |
|
|
In the @file{gcc.dg} testsuite, it is often necessary to test that an
|
880 |
|
|
error is indeed a hard error and not just a warning---for example,
|
881 |
|
|
where it is a constraint violation in the C standard, which must
|
882 |
|
|
become an error with @option{-pedantic-errors}. The following idiom,
|
883 |
|
|
where the first line shown is line @var{line} of the file and the line
|
884 |
|
|
that generates the error, is used for this:
|
885 |
|
|
|
886 |
|
|
@smallexample
|
887 |
|
|
/* @{ dg-bogus "warning" "warning in place of error" @} */
|
888 |
|
|
/* @{ dg-error "@var{regexp}" "@var{message}" @{ target *-*-* @} @var{line} @} */
|
889 |
|
|
@end smallexample
|
890 |
|
|
|
891 |
|
|
It may be necessary to check that an expression is an integer constant
|
892 |
|
|
expression and has a certain value. To check that @code{@var{E}} has
|
893 |
|
|
value @code{@var{V}}, an idiom similar to the following is used:
|
894 |
|
|
|
895 |
|
|
@smallexample
|
896 |
|
|
char x[((E) == (V) ? 1 : -1)];
|
897 |
|
|
@end smallexample
|
898 |
|
|
|
899 |
|
|
In @file{gcc.dg} tests, @code{__typeof__} is sometimes used to make
|
900 |
|
|
assertions about the types of expressions. See, for example,
|
901 |
|
|
@file{gcc.dg/c99-condexpr-1.c}. The more subtle uses depend on the
|
902 |
|
|
exact rules for the types of conditional expressions in the C
|
903 |
|
|
standard; see, for example, @file{gcc.dg/c99-intconst-1.c}.
|
904 |
|
|
|
905 |
|
|
It is useful to be able to test that optimizations are being made
|
906 |
|
|
properly. This cannot be done in all cases, but it can be done where
|
907 |
|
|
the optimization will lead to code being optimized away (for example,
|
908 |
|
|
where flow analysis or alias analysis should show that certain code
|
909 |
|
|
cannot be called) or to functions not being called because they have
|
910 |
|
|
been expanded as built-in functions. Such tests go in
|
911 |
|
|
@file{gcc.c-torture/execute}. Where code should be optimized away, a
|
912 |
|
|
call to a nonexistent function such as @code{link_failure ()} may be
|
913 |
|
|
inserted; a definition
|
914 |
|
|
|
915 |
|
|
@smallexample
|
916 |
|
|
#ifndef __OPTIMIZE__
|
917 |
|
|
void
|
918 |
|
|
link_failure (void)
|
919 |
|
|
@{
|
920 |
|
|
abort ();
|
921 |
|
|
@}
|
922 |
|
|
#endif
|
923 |
|
|
@end smallexample
|
924 |
|
|
|
925 |
|
|
@noindent
|
926 |
|
|
will also be needed so that linking still succeeds when the test is
|
927 |
|
|
run without optimization. When all calls to a built-in function
|
928 |
|
|
should have been optimized and no calls to the non-built-in version of
|
929 |
|
|
the function should remain, that function may be defined as
|
930 |
|
|
@code{static} to call @code{abort ()} (although redeclaring a function
|
931 |
|
|
as static may not work on all targets).
|
932 |
|
|
|
933 |
|
|
All testcases must be portable. Target-specific testcases must have
|
934 |
|
|
appropriate code to avoid causing failures on unsupported systems;
|
935 |
|
|
unfortunately, the mechanisms for this differ by directory.
|
936 |
|
|
|
937 |
|
|
FIXME: discuss non-C testsuites here.
|
938 |
|
|
|
939 |
|
|
@node Test Directives
|
940 |
|
|
@section Directives used within DejaGnu tests
|
941 |
|
|
|
942 |
|
|
@menu
|
943 |
|
|
* Directives:: Syntax and descriptions of test directives.
|
944 |
|
|
* Selectors:: Selecting targets to which a test applies.
|
945 |
|
|
* Effective-Target Keywords:: Keywords describing target attributes.
|
946 |
|
|
* Add Options:: Features for @code{dg-add-options}
|
947 |
|
|
* Require Support:: Variants of @code{dg-require-@var{support}}
|
948 |
|
|
* Final Actions:: Commands for use in @code{dg-final}
|
949 |
|
|
@end menu
|
950 |
|
|
|
951 |
|
|
@node Directives
|
952 |
|
|
@subsection Syntax and Descriptions of test directives
|
953 |
|
|
|
954 |
|
|
Test directives appear within comments in a test source file and begin
|
955 |
|
|
with @code{dg-}. Some of these are defined within DejaGnu and others
|
956 |
|
|
are local to the GCC testsuite.
|
957 |
|
|
|
958 |
|
|
The order in which test directives appear in a test can be important:
|
959 |
|
|
directives local to GCC sometimes override information used by the
|
960 |
|
|
DejaGnu directives, which know nothing about the GCC directives, so the
|
961 |
|
|
DejaGnu directives must precede GCC directives.
|
962 |
|
|
|
963 |
|
|
Several test directives include selectors (@pxref{Selectors, , })
|
964 |
|
|
which are usually preceded by the keyword @code{target} or @code{xfail}.
|
965 |
|
|
|
966 |
|
|
@subsubsection Specify how to build the test
|
967 |
|
|
|
968 |
|
|
@table @code
|
969 |
|
|
@item @{ dg-do @var{do-what-keyword} [@{ target/xfail @var{selector} @}] @}
|
970 |
|
|
@var{do-what-keyword} specifies how the test is compiled and whether
|
971 |
|
|
it is executed. It is one of:
|
972 |
|
|
|
973 |
|
|
@table @code
|
974 |
|
|
@item preprocess
|
975 |
|
|
Compile with @option{-E} to run only the preprocessor.
|
976 |
|
|
@item compile
|
977 |
|
|
Compile with @option{-S} to produce an assembly code file.
|
978 |
|
|
@item assemble
|
979 |
|
|
Compile with @option{-c} to produce a relocatable object file.
|
980 |
|
|
@item link
|
981 |
|
|
Compile, assemble, and link to produce an executable file.
|
982 |
|
|
@item run
|
983 |
|
|
Produce and run an executable file, which is expected to return
|
984 |
|
|
an exit code of 0.
|
985 |
|
|
@end table
|
986 |
|
|
|
987 |
|
|
The default is @code{compile}. That can be overridden for a set of
|
988 |
|
|
tests by redefining @code{dg-do-what-default} within the @code{.exp}
|
989 |
|
|
file for those tests.
|
990 |
|
|
|
991 |
|
|
If the directive includes the optional @samp{@{ target @var{selector} @}}
|
992 |
|
|
then the test is skipped unless the target system matches the
|
993 |
|
|
@var{selector}.
|
994 |
|
|
|
995 |
|
|
If @var{do-what-keyword} is @code{run} and the directive includes
|
996 |
|
|
the optional @samp{@{ xfail @var{selector} @}} and the selector is met
|
997 |
|
|
then the test is expected to fail. The @code{xfail} clause is ignored
|
998 |
|
|
for other values of @var{do-what-keyword}; those tests can use
|
999 |
|
|
directive @code{dg-xfail-if}.
|
1000 |
|
|
@end table
|
1001 |
|
|
|
1002 |
|
|
@subsubsection Specify additional compiler options
|
1003 |
|
|
|
1004 |
|
|
@table @code
|
1005 |
|
|
@item @{ dg-options @var{options} [@{ target @var{selector} @}] @}
|
1006 |
|
|
This DejaGnu directive provides a list of compiler options, to be used
|
1007 |
|
|
if the target system matches @var{selector}, that replace the default
|
1008 |
|
|
options used for this set of tests.
|
1009 |
|
|
|
1010 |
|
|
@item @{ dg-add-options @var{feature} @dots{} @}
|
1011 |
|
|
Add any compiler options that are needed to access certain features.
|
1012 |
|
|
This directive does nothing on targets that enable the features by
|
1013 |
|
|
default, or that don't provide them at all. It must come after
|
1014 |
|
|
all @code{dg-options} directives.
|
1015 |
|
|
For supported values of @var{feature} see @ref{Add Options, ,}.
|
1016 |
|
|
@end table
|
1017 |
|
|
|
1018 |
|
|
@subsubsection Modify the test timeout value
|
1019 |
|
|
|
1020 |
|
|
The normal timeout limit, in seconds, is found by searching the
|
1021 |
|
|
following in order:
|
1022 |
|
|
|
1023 |
|
|
@itemize @bullet
|
1024 |
|
|
@item the value defined by an earlier @code{dg-timeout} directive in
|
1025 |
|
|
the test
|
1026 |
|
|
|
1027 |
|
|
@item variable @var{tool_timeout} defined by the set of tests
|
1028 |
|
|
|
1029 |
|
|
@item @var{gcc},@var{timeout} set in the target board
|
1030 |
|
|
|
1031 |
|
|
@item 300
|
1032 |
|
|
@end itemize
|
1033 |
|
|
|
1034 |
|
|
@table @code
|
1035 |
|
|
@item @{ dg-timeout @var{n} [@{target @var{selector} @}] @}
|
1036 |
|
|
Set the time limit for the compilation and for the execution of the test
|
1037 |
|
|
to the specified number of seconds.
|
1038 |
|
|
|
1039 |
|
|
@item @{ dg-timeout-factor @var{x} [@{ target @var{selector} @}] @}
|
1040 |
|
|
Multiply the normal time limit for compilation and execution of the test
|
1041 |
|
|
by the specified floating-point factor.
|
1042 |
|
|
@end table
|
1043 |
|
|
|
1044 |
|
|
@subsubsection Skip a test for some targets
|
1045 |
|
|
|
1046 |
|
|
@table @code
|
1047 |
|
|
@item @{ dg-skip-if @var{comment} @{ @var{selector} @} [@{ @var{include-opts} @} [@{ @var{exclude-opts} @}]] @}
|
1048 |
|
|
Arguments @var{include-opts} and @var{exclude-opts} are lists in which
|
1049 |
|
|
each element is a string of zero or more GCC options.
|
1050 |
|
|
Skip the test if all of the following conditions are met:
|
1051 |
|
|
@itemize @bullet
|
1052 |
|
|
@item the test system is included in @var{selector}
|
1053 |
|
|
|
1054 |
|
|
@item for at least one of the option strings in @var{include-opts},
|
1055 |
|
|
every option from that string is in the set of options with which
|
1056 |
|
|
the test would be compiled; use @samp{"*"} for an @var{include-opts} list
|
1057 |
|
|
that matches any options; that is the default if @var{include-opts} is
|
1058 |
|
|
not specified
|
1059 |
|
|
|
1060 |
|
|
@item for each of the option strings in @var{exclude-opts}, at least one
|
1061 |
|
|
option from that string is not in the set of options with which the test
|
1062 |
|
|
would be compiled; use @samp{""} for an empty @var{exclude-opts} list;
|
1063 |
|
|
that is the default if @var{exclude-opts} is not specified
|
1064 |
|
|
@end itemize
|
1065 |
|
|
|
1066 |
|
|
For example, to skip a test if option @code{-Os} is present:
|
1067 |
|
|
|
1068 |
|
|
@smallexample
|
1069 |
|
|
/* @{ dg-skip-if "" @{ *-*-* @} @{ "-Os" @} @{ "" @} @} */
|
1070 |
|
|
@end smallexample
|
1071 |
|
|
|
1072 |
|
|
To skip a test if both options @code{-O2} and @code{-g} are present:
|
1073 |
|
|
|
1074 |
|
|
@smallexample
|
1075 |
|
|
/* @{ dg-skip-if "" @{ *-*-* @} @{ "-O2 -g" @} @{ "" @} @} */
|
1076 |
|
|
@end smallexample
|
1077 |
|
|
|
1078 |
|
|
To skip a test if either @code{-O2} or @code{-O3} is present:
|
1079 |
|
|
|
1080 |
|
|
@smallexample
|
1081 |
|
|
/* @{ dg-skip-if "" @{ *-*-* @} @{ "-O2" "-O3" @} @{ "" @} @} */
|
1082 |
|
|
@end smallexample
|
1083 |
|
|
|
1084 |
|
|
To skip a test unless option @code{-Os} is present:
|
1085 |
|
|
|
1086 |
|
|
@smallexample
|
1087 |
|
|
/* @{ dg-skip-if "" @{ *-*-* @} @{ "*" @} @{ "-Os" @} @} */
|
1088 |
|
|
@end smallexample
|
1089 |
|
|
|
1090 |
|
|
To skip a test if either @code{-O2} or @code{-O3} is used with @code{-g}
|
1091 |
|
|
but not if @code{-fpic} is also present:
|
1092 |
|
|
|
1093 |
|
|
@smallexample
|
1094 |
|
|
/* @{ dg-skip-if "" @{ *-*-* @} @{ "-O2 -g" "-O3 -g" @} @{ "-fpic" @} @} */
|
1095 |
|
|
@end smallexample
|
1096 |
|
|
|
1097 |
|
|
@item @{ dg-require-effective-target @var{keyword} [@{ @var{selector} @}] @}
|
1098 |
|
|
Skip the test if the test target, including current multilib flags,
|
1099 |
|
|
is not covered by the effective-target keyword.
|
1100 |
|
|
If the directive includes the optional @samp{@{ @var{selector} @}}
|
1101 |
|
|
then the effective-target test is only performed if the target system
|
1102 |
|
|
matches the @var{selector}.
|
1103 |
|
|
This directive must appear after any @code{dg-do} directive in the test
|
1104 |
|
|
and before any @code{dg-additional-sources} directive.
|
1105 |
|
|
@xref{Effective-Target Keywords, , }.
|
1106 |
|
|
|
1107 |
|
|
@item @{ dg-require-@var{support} args @}
|
1108 |
|
|
Skip the test if the target does not provide the required support.
|
1109 |
|
|
These directives must appear after any @code{dg-do} directive in the test
|
1110 |
|
|
and before any @code{dg-additional-sources} directive.
|
1111 |
|
|
They require at least one argument, which can be an empty string if the
|
1112 |
|
|
specific procedure does not examine the argument.
|
1113 |
|
|
@xref{Require Support, , }, for a complete list of these directives.
|
1114 |
|
|
@end table
|
1115 |
|
|
|
1116 |
|
|
@subsubsection Expect a test to fail for some targets
|
1117 |
|
|
|
1118 |
|
|
@table @code
|
1119 |
|
|
@item @{ dg-xfail-if @var{comment} @{ @var{selector} @} [@{ @var{include-opts} @} [@{ @var{exclude-opts} @}]] @}
|
1120 |
|
|
Expect the test to fail if the conditions (which are the same as for
|
1121 |
|
|
@code{dg-skip-if}) are met. This does not affect the execute step.
|
1122 |
|
|
|
1123 |
|
|
@item @{ dg-xfail-run-if @var{comment} @{ @var{selector} @} [@{ @var{include-opts} @} [@{ @var{exclude-opts} @}]] @}
|
1124 |
|
|
Expect the execute step of a test to fail if the conditions (which are
|
1125 |
|
|
the same as for @code{dg-skip-if}) are met.
|
1126 |
|
|
@end table
|
1127 |
|
|
|
1128 |
|
|
@subsubsection Expect the test executable to fail
|
1129 |
|
|
|
1130 |
|
|
@table @code
|
1131 |
|
|
@item @{ dg-shouldfail @var{comment} [@{ @var{selector} @} [@{ @var{include-opts} @} [@{ @var{exclude-opts} @}]]] @}
|
1132 |
|
|
Expect the test executable to return a nonzero exit status if the
|
1133 |
|
|
conditions (which are the same as for @code{dg-skip-if}) are met.
|
1134 |
|
|
@end table
|
1135 |
|
|
|
1136 |
|
|
@subsubsection Verify compiler messages
|
1137 |
|
|
|
1138 |
|
|
@table @code
|
1139 |
|
|
@item @{ dg-error @var{regexp} [@var{comment} [@{ target/xfail @var{selector} @} [@var{line}] @}]] @}
|
1140 |
|
|
This DejaGnu directive appears on a source line that is expected to get
|
1141 |
|
|
an error message, or else specifies the source line associated with the
|
1142 |
|
|
message. If there is no message for that line or if the text of that
|
1143 |
|
|
message is not matched by @var{regexp} then the check fails and
|
1144 |
|
|
@var{comment} is included in the @code{FAIL} message. The check does
|
1145 |
|
|
not look for the string @samp{error} unless it is part of @var{regexp}.
|
1146 |
|
|
|
1147 |
|
|
@item @{ dg-warning @var{regexp} [@var{comment} [@{ target/xfail @var{selector} @} [@var{line}] @}]] @}
|
1148 |
|
|
This DejaGnu directive appears on a source line that is expected to get
|
1149 |
|
|
a warning message, or else specifies the source line associated with the
|
1150 |
|
|
message. If there is no message for that line or if the text of that
|
1151 |
|
|
message is not matched by @var{regexp} then the check fails and
|
1152 |
|
|
@var{comment} is included in the @code{FAIL} message. The check does
|
1153 |
|
|
not look for the string @samp{warning} unless it is part of @var{regexp}.
|
1154 |
|
|
|
1155 |
|
|
@item @{ dg-message @var{regexp} [@var{comment} [@{ target/xfail @var{selector} @} [@var{line}] @}]] @}
|
1156 |
|
|
The line is expected to get a message other than an error or warning.
|
1157 |
|
|
If there is no message for that line or if the text of that message is
|
1158 |
|
|
not matched by @var{regexp} then the check fails and @var{comment} is
|
1159 |
|
|
included in the @code{FAIL} message.
|
1160 |
|
|
|
1161 |
|
|
@item @{ dg-bogus @var{regexp} [@var{comment} [@{ target/xfail @var{selector} @} [@var{line}] @}]] @}
|
1162 |
|
|
This DejaGnu directive appears on a source line that should not get a
|
1163 |
|
|
message matching @var{regexp}, or else specifies the source line
|
1164 |
|
|
associated with the bogus message. It is usually used with @samp{xfail}
|
1165 |
|
|
to indicate that the message is a known problem for a particular set of
|
1166 |
|
|
targets.
|
1167 |
|
|
|
1168 |
|
|
@item @{ dg-excess-errors @var{comment} [@{ target/xfail @var{selector} @}] @}
|
1169 |
|
|
This DejaGnu directive indicates that the test is expected to fail due
|
1170 |
|
|
to compiler messages that are not handled by @samp{dg-error},
|
1171 |
|
|
@samp{dg-warning} or @samp{dg-bogus}. For this directive @samp{xfail}
|
1172 |
|
|
has the same effect as @samp{target}.
|
1173 |
|
|
|
1174 |
|
|
@item @{ dg-prune-output @var{regexp} @}
|
1175 |
|
|
Prune messages matching @var{regexp} from the test output.
|
1176 |
|
|
@end table
|
1177 |
|
|
|
1178 |
|
|
@subsubsection Verify output of the test executable
|
1179 |
|
|
|
1180 |
|
|
@table @code
|
1181 |
|
|
@item @{ dg-output @var{regexp} [@{ target/xfail @var{selector} @}] @}
|
1182 |
|
|
This DejaGnu directive compares @var{regexp} to the combined output
|
1183 |
|
|
that the test executable writes to @file{stdout} and @file{stderr}.
|
1184 |
|
|
@end table
|
1185 |
|
|
|
1186 |
|
|
@subsubsection Specify additional files for a test
|
1187 |
|
|
|
1188 |
|
|
@table @code
|
1189 |
|
|
@item @{ dg-additional-files "@var{filelist}" @}
|
1190 |
|
|
Specify additional files, other than source files, that must be copied
|
1191 |
|
|
to the system where the compiler runs.
|
1192 |
|
|
|
1193 |
|
|
@item @{ dg-additional-sources "@var{filelist}" @}
|
1194 |
|
|
Specify additional source files to appear in the compile line
|
1195 |
|
|
following the main test file.
|
1196 |
|
|
@end table
|
1197 |
|
|
|
1198 |
|
|
@subsubsection Add checks at the end of a test
|
1199 |
|
|
|
1200 |
|
|
@table @code
|
1201 |
|
|
@item @{ dg-final @{ @var{local-directive} @} @}
|
1202 |
|
|
This DejaGnu directive is placed within a comment anywhere in the
|
1203 |
|
|
source file and is processed after the test has been compiled and run.
|
1204 |
|
|
Multiple @samp{dg-final} commands are processed in the order in which
|
1205 |
|
|
they appear in the source file. @xref{Final Actions, , }, for a list
|
1206 |
|
|
of directives that can be used within @code{dg-final}.
|
1207 |
|
|
@end table
|
1208 |
|
|
|
1209 |
|
|
@node Selectors
|
1210 |
|
|
@subsection Selecting targets to which a test applies
|
1211 |
|
|
|
1212 |
|
|
Several test directives include @var{selector}s to limit the targets
|
1213 |
|
|
for which a test is run or to declare that a test is expected to fail
|
1214 |
|
|
on particular targets.
|
1215 |
|
|
|
1216 |
|
|
A selector is:
|
1217 |
|
|
@itemize @bullet
|
1218 |
|
|
@item one or more target triplets, possibly including wildcard characters
|
1219 |
|
|
@item a single effective-target keyword (@pxref{Effective-Target Keywords})
|
1220 |
|
|
@item a logical expression
|
1221 |
|
|
@end itemize
|
1222 |
|
|
|
1223 |
|
|
Depending on the
|
1224 |
|
|
context, the selector specifies whether a test is skipped and reported
|
1225 |
|
|
as unsupported or is expected to fail. Use @samp{*-*-*} to match any
|
1226 |
|
|
target.
|
1227 |
|
|
|
1228 |
|
|
A selector expression appears within curly braces and uses a single
|
1229 |
|
|
logical operator: one of @samp{!}, @samp{&&}, or @samp{||}. An
|
1230 |
|
|
operand is another selector expression, an effective-target keyword,
|
1231 |
|
|
a single target triplet, or a list of target triplets within quotes or
|
1232 |
|
|
curly braces. For example:
|
1233 |
|
|
|
1234 |
|
|
@smallexample
|
1235 |
|
|
@{ target @{ ! "hppa*-*-* ia64*-*-*" @} @}
|
1236 |
|
|
@{ target @{ powerpc*-*-* && lp64 @} @}
|
1237 |
|
|
@{ xfail @{ lp64 || vect_no_align @} @}
|
1238 |
|
|
@end smallexample
|
1239 |
|
|
|
1240 |
|
|
@node Effective-Target Keywords
|
1241 |
|
|
@subsection Keywords describing target attributes
|
1242 |
|
|
|
1243 |
|
|
Effective-target keywords identify sets of targets that support
|
1244 |
|
|
particular functionality. They are used to limit tests to be run only
|
1245 |
|
|
for particular targets, or to specify that particular sets of targets
|
1246 |
|
|
are expected to fail some tests.
|
1247 |
|
|
|
1248 |
|
|
Effective-target keywords are defined in @file{lib/target-supports.exp} in
|
1249 |
|
|
the GCC testsuite, with the exception of those that are documented as
|
1250 |
|
|
being local to a particular test directory.
|
1251 |
|
|
|
1252 |
|
|
The @samp{effective target} takes into account all of the compiler options
|
1253 |
|
|
with which the test will be compiled, including the multilib options.
|
1254 |
|
|
By convention, keywords ending in @code{_nocache} can also include options
|
1255 |
|
|
specified for the particular test in an earlier @code{dg-options} or
|
1256 |
|
|
@code{dg-add-options} directive.
|
1257 |
|
|
|
1258 |
|
|
@subsubsection Data type sizes
|
1259 |
|
|
|
1260 |
|
|
@table @code
|
1261 |
|
|
@item ilp32
|
1262 |
|
|
Target has 32-bit @code{int}, @code{long}, and pointers.
|
1263 |
|
|
|
1264 |
|
|
@item lp64
|
1265 |
|
|
Target has 32-bit @code{int}, 64-bit @code{long} and pointers.
|
1266 |
|
|
|
1267 |
|
|
@item llp64
|
1268 |
|
|
Target has 32-bit @code{int} and @code{long}, 64-bit @code{long long}
|
1269 |
|
|
and pointers.
|
1270 |
|
|
|
1271 |
|
|
@item double64
|
1272 |
|
|
Target has 64-bit @code{double}.
|
1273 |
|
|
|
1274 |
|
|
@item double64plus
|
1275 |
|
|
Target has @code{double} that is 64 bits or longer.
|
1276 |
|
|
|
1277 |
|
|
@item int32plus
|
1278 |
|
|
Target has @code{int} that is at 32 bits or longer.
|
1279 |
|
|
|
1280 |
|
|
@item int16
|
1281 |
|
|
Target has @code{int} that is 16 bits or shorter.
|
1282 |
|
|
|
1283 |
|
|
@item large_double
|
1284 |
|
|
Target supports @code{double} that is longer than @code{float}.
|
1285 |
|
|
|
1286 |
|
|
@item large_long_double
|
1287 |
|
|
Target supports @code{long double} that is longer than @code{double}.
|
1288 |
|
|
|
1289 |
|
|
@item ptr32plus
|
1290 |
|
|
Target has pointers that are 32 bits or longer.
|
1291 |
|
|
|
1292 |
|
|
@item size32plus
|
1293 |
|
|
Target supports array and structure sizes that are 32 bits or longer.
|
1294 |
|
|
|
1295 |
|
|
@item 4byte_wchar_t
|
1296 |
|
|
Target has @code{wchar_t} that is at least 4 bytes.
|
1297 |
|
|
@end table
|
1298 |
|
|
|
1299 |
|
|
@subsubsection Fortran-specific attributes
|
1300 |
|
|
|
1301 |
|
|
@table @code
|
1302 |
|
|
@item fortran_integer_16
|
1303 |
|
|
Target supports Fortran @code{integer} that is 16 bytes or longer.
|
1304 |
|
|
|
1305 |
|
|
@item fortran_large_int
|
1306 |
|
|
Target supports Fortran @code{integer} kinds larger than @code{integer(8)}.
|
1307 |
|
|
|
1308 |
|
|
@item fortran_large_real
|
1309 |
|
|
Target supports Fortran @code{real} kinds larger than @code{real(8)}.
|
1310 |
|
|
@end table
|
1311 |
|
|
|
1312 |
|
|
@subsubsection Vector-specific attributes
|
1313 |
|
|
|
1314 |
|
|
@table @code
|
1315 |
|
|
@item vect_condition
|
1316 |
|
|
Target supports vector conditional operations.
|
1317 |
|
|
|
1318 |
|
|
@item vect_double
|
1319 |
|
|
Target supports hardware vectors of @code{double}.
|
1320 |
|
|
|
1321 |
|
|
@item vect_float
|
1322 |
|
|
Target supports hardware vectors of @code{float}.
|
1323 |
|
|
|
1324 |
|
|
@item vect_int
|
1325 |
|
|
Target supports hardware vectors of @code{int}.
|
1326 |
|
|
|
1327 |
|
|
@item vect_int_mult
|
1328 |
|
|
Target supports a vector widening multiplication of @code{short} operands
|
1329 |
|
|
into an @code{int} result, or supports promotion (unpacking) from
|
1330 |
|
|
@code{short} to @code{int} and a non-widening multiplication of @code{int}.
|
1331 |
|
|
|
1332 |
|
|
@item vect_long
|
1333 |
|
|
Target supports hardware vectors of @code{long}.
|
1334 |
|
|
|
1335 |
|
|
@item vect_long_long
|
1336 |
|
|
Target supports hardware vectors of @code{long long}.
|
1337 |
|
|
|
1338 |
|
|
@item vect_aligned_arrays
|
1339 |
|
|
Target aligns arrays to vector alignment boundary.
|
1340 |
|
|
|
1341 |
|
|
@item vect_hw_misalign
|
1342 |
|
|
Target supports a vector misalign access.
|
1343 |
|
|
|
1344 |
|
|
@item vect_no_align
|
1345 |
|
|
Target does not support a vector alignment mechanism.
|
1346 |
|
|
|
1347 |
|
|
@item vect_no_int_max
|
1348 |
|
|
Target does not support a vector max instruction on @code{int}.
|
1349 |
|
|
|
1350 |
|
|
@item vect_no_int_add
|
1351 |
|
|
Target does not support a vector add instruction on @code{int}.
|
1352 |
|
|
|
1353 |
|
|
@item vect_no_bitwise
|
1354 |
|
|
Target does not support vector bitwise instructions.
|
1355 |
|
|
|
1356 |
|
|
@item vect_char_mult
|
1357 |
|
|
Target supports @code{vector char} multiplication.
|
1358 |
|
|
|
1359 |
|
|
@item vect_short_mult
|
1360 |
|
|
Target supports @code{vector short} multiplication.
|
1361 |
|
|
|
1362 |
|
|
@item vect_int_mult
|
1363 |
|
|
Target supports @code{vector int} multiplication.
|
1364 |
|
|
|
1365 |
|
|
@item vect_extract_even_odd
|
1366 |
|
|
Target supports vector even/odd element extraction.
|
1367 |
|
|
|
1368 |
|
|
@item vect_extract_even_odd_wide
|
1369 |
|
|
Target supports vector even/odd element extraction of vectors with elements
|
1370 |
|
|
@code{SImode} or larger.
|
1371 |
|
|
|
1372 |
|
|
@item vect_interleave
|
1373 |
|
|
Target supports vector interleaving.
|
1374 |
|
|
|
1375 |
|
|
@item vect_strided
|
1376 |
|
|
Target supports vector interleaving and extract even/odd.
|
1377 |
|
|
|
1378 |
|
|
@item vect_strided_wide
|
1379 |
|
|
Target supports vector interleaving and extract even/odd for wide
|
1380 |
|
|
element types.
|
1381 |
|
|
|
1382 |
|
|
@item vect_perm
|
1383 |
|
|
Target supports vector permutation.
|
1384 |
|
|
|
1385 |
|
|
@item vect_shift
|
1386 |
|
|
Target supports a hardware vector shift operation.
|
1387 |
|
|
|
1388 |
|
|
@item vect_widen_sum_hi_to_si
|
1389 |
|
|
Target supports a vector widening summation of @code{short} operands
|
1390 |
|
|
into @code{int} results, or can promote (unpack) from @code{short}
|
1391 |
|
|
to @code{int}.
|
1392 |
|
|
|
1393 |
|
|
@item vect_widen_sum_qi_to_hi
|
1394 |
|
|
Target supports a vector widening summation of @code{char} operands
|
1395 |
|
|
into @code{short} results, or can promote (unpack) from @code{char}
|
1396 |
|
|
to @code{short}.
|
1397 |
|
|
|
1398 |
|
|
@item vect_widen_sum_qi_to_si
|
1399 |
|
|
Target supports a vector widening summation of @code{char} operands
|
1400 |
|
|
into @code{int} results.
|
1401 |
|
|
|
1402 |
|
|
@item vect_widen_mult_qi_to_hi
|
1403 |
|
|
Target supports a vector widening multiplication of @code{char} operands
|
1404 |
|
|
into @code{short} results, or can promote (unpack) from @code{char} to
|
1405 |
|
|
@code{short} and perform non-widening multiplication of @code{short}.
|
1406 |
|
|
|
1407 |
|
|
@item vect_widen_mult_hi_to_si
|
1408 |
|
|
Target supports a vector widening multiplication of @code{short} operands
|
1409 |
|
|
into @code{int} results, or can promote (unpack) from @code{short} to
|
1410 |
|
|
@code{int} and perform non-widening multiplication of @code{int}.
|
1411 |
|
|
|
1412 |
|
|
@item vect_sdot_qi
|
1413 |
|
|
Target supports a vector dot-product of @code{signed char}.
|
1414 |
|
|
|
1415 |
|
|
@item vect_udot_qi
|
1416 |
|
|
Target supports a vector dot-product of @code{unsigned char}.
|
1417 |
|
|
|
1418 |
|
|
@item vect_sdot_hi
|
1419 |
|
|
Target supports a vector dot-product of @code{signed short}.
|
1420 |
|
|
|
1421 |
|
|
@item vect_udot_hi
|
1422 |
|
|
Target supports a vector dot-product of @code{unsigned short}.
|
1423 |
|
|
|
1424 |
|
|
@item vect_pack_trunc
|
1425 |
|
|
Target supports a vector demotion (packing) of @code{short} to @code{char}
|
1426 |
|
|
and from @code{int} to @code{short} using modulo arithmetic.
|
1427 |
|
|
|
1428 |
|
|
@item vect_unpack
|
1429 |
|
|
Target supports a vector promotion (unpacking) of @code{char} to @code{short}
|
1430 |
|
|
and from @code{char} to @code{int}.
|
1431 |
|
|
|
1432 |
|
|
@item vect_intfloat_cvt
|
1433 |
|
|
Target supports conversion from @code{signed int} to @code{float}.
|
1434 |
|
|
|
1435 |
|
|
@item vect_uintfloat_cvt
|
1436 |
|
|
Target supports conversion from @code{unsigned int} to @code{float}.
|
1437 |
|
|
|
1438 |
|
|
@item vect_floatint_cvt
|
1439 |
|
|
Target supports conversion from @code{float} to @code{signed int}.
|
1440 |
|
|
|
1441 |
|
|
@item vect_floatuint_cvt
|
1442 |
|
|
Target supports conversion from @code{float} to @code{unsigned int}.
|
1443 |
|
|
@end table
|
1444 |
|
|
|
1445 |
|
|
@subsubsection Thread Local Storage attributes
|
1446 |
|
|
|
1447 |
|
|
@table @code
|
1448 |
|
|
@item tls
|
1449 |
|
|
Target supports thread-local storage.
|
1450 |
|
|
|
1451 |
|
|
@item tls_native
|
1452 |
|
|
Target supports native (rather than emulated) thread-local storage.
|
1453 |
|
|
|
1454 |
|
|
@item tls_runtime
|
1455 |
|
|
Test system supports executing TLS executables.
|
1456 |
|
|
@end table
|
1457 |
|
|
|
1458 |
|
|
@subsubsection Decimal floating point attributes
|
1459 |
|
|
|
1460 |
|
|
@table @code
|
1461 |
|
|
@item dfp
|
1462 |
|
|
Targets supports compiling decimal floating point extension to C.
|
1463 |
|
|
|
1464 |
|
|
@item dfp_nocache
|
1465 |
|
|
Including the options used to compile this particular test, the
|
1466 |
|
|
target supports compiling decimal floating point extension to C.
|
1467 |
|
|
|
1468 |
|
|
@item dfprt
|
1469 |
|
|
Test system can execute decimal floating point tests.
|
1470 |
|
|
|
1471 |
|
|
@item dfprt_nocache
|
1472 |
|
|
Including the options used to compile this particular test, the
|
1473 |
|
|
test system can execute decimal floating point tests.
|
1474 |
|
|
|
1475 |
|
|
@item hard_dfp
|
1476 |
|
|
Target generates decimal floating point instructions with current options.
|
1477 |
|
|
@end table
|
1478 |
|
|
|
1479 |
|
|
@subsubsection ARM-specific attributes
|
1480 |
|
|
|
1481 |
|
|
@table @code
|
1482 |
|
|
@item arm32
|
1483 |
|
|
ARM target generates 32-bit code.
|
1484 |
|
|
|
1485 |
|
|
@item arm_eabi
|
1486 |
|
|
ARM target adheres to the ABI for the ARM Architecture.
|
1487 |
|
|
|
1488 |
|
|
@item arm_hard_vfp_ok
|
1489 |
|
|
ARM target supports @code{-mfpu=vfp -mfloat-abi=hard}.
|
1490 |
|
|
Some multilibs may be incompatible with these options.
|
1491 |
|
|
|
1492 |
|
|
@item arm_iwmmxt_ok
|
1493 |
|
|
ARM target supports @code{-mcpu=iwmmxt}.
|
1494 |
|
|
Some multilibs may be incompatible with this option.
|
1495 |
|
|
|
1496 |
|
|
@item arm_neon
|
1497 |
|
|
ARM target supports generating NEON instructions.
|
1498 |
|
|
|
1499 |
|
|
@item arm_neon_hw
|
1500 |
|
|
Test system supports executing NEON instructions.
|
1501 |
|
|
|
1502 |
|
|
@item arm_neon_ok
|
1503 |
|
|
ARM Target supports @code{-mfpu=neon -mfloat-abi=softfp}.
|
1504 |
|
|
Some multilibs may be incompatible with these options.
|
1505 |
|
|
|
1506 |
|
|
@item arm_thumb1_ok
|
1507 |
|
|
ARM target generates Thumb-1 code for @code{-mthumb}.
|
1508 |
|
|
|
1509 |
|
|
@item arm_thumb2_ok
|
1510 |
|
|
ARM target generates Thumb-2 code for @code{-mthumb}.
|
1511 |
|
|
|
1512 |
|
|
@item arm_vfp_ok
|
1513 |
|
|
ARM target supports @code{-mfpu=vfp -mfloat-abi=softfp}.
|
1514 |
|
|
Some multilibs may be incompatible with these options.
|
1515 |
|
|
@end table
|
1516 |
|
|
|
1517 |
|
|
@subsubsection MIPS-specific attributes
|
1518 |
|
|
|
1519 |
|
|
@table @code
|
1520 |
|
|
@item mips64
|
1521 |
|
|
MIPS target supports 64-bit instructions.
|
1522 |
|
|
|
1523 |
|
|
@item nomips16
|
1524 |
|
|
MIPS target does not produce MIPS16 code.
|
1525 |
|
|
|
1526 |
|
|
@item mips16_attribute
|
1527 |
|
|
MIPS target can generate MIPS16 code.
|
1528 |
|
|
|
1529 |
|
|
@item mips_loongson
|
1530 |
|
|
MIPS target is a Loongson-2E or -2F target using an ABI that supports
|
1531 |
|
|
the Loongson vector modes.
|
1532 |
|
|
|
1533 |
|
|
@item mips_newabi_large_long_double
|
1534 |
|
|
MIPS target supports @code{long double} larger than @code{double}
|
1535 |
|
|
when using the new ABI.
|
1536 |
|
|
|
1537 |
|
|
@item mpaired_single
|
1538 |
|
|
MIPS target supports @code{-mpaired-single}.
|
1539 |
|
|
@end table
|
1540 |
|
|
|
1541 |
|
|
@subsubsection PowerPC-specific attributes
|
1542 |
|
|
|
1543 |
|
|
@table @code
|
1544 |
|
|
@item powerpc64
|
1545 |
|
|
Test system supports executing 64-bit instructions.
|
1546 |
|
|
|
1547 |
|
|
@item powerpc_altivec
|
1548 |
|
|
PowerPC target supports AltiVec.
|
1549 |
|
|
|
1550 |
|
|
@item powerpc_altivec_ok
|
1551 |
|
|
PowerPC target supports @code{-maltivec}.
|
1552 |
|
|
|
1553 |
|
|
@item powerpc_fprs
|
1554 |
|
|
PowerPC target supports floating-point registers.
|
1555 |
|
|
|
1556 |
|
|
@item powerpc_hard_double
|
1557 |
|
|
PowerPC target supports hardware double-precision floating-point.
|
1558 |
|
|
|
1559 |
|
|
@item powerpc_ppu_ok
|
1560 |
|
|
PowerPC target supports @code{-mcpu=cell}.
|
1561 |
|
|
|
1562 |
|
|
@item powerpc_spe
|
1563 |
|
|
PowerPC target supports PowerPC SPE.
|
1564 |
|
|
|
1565 |
|
|
@item powerpc_spe_nocache
|
1566 |
|
|
Including the options used to compile this particular test, the
|
1567 |
|
|
PowerPC target supports PowerPC SPE.
|
1568 |
|
|
|
1569 |
|
|
@item powerpc_spu
|
1570 |
|
|
PowerPC target supports PowerPC SPU.
|
1571 |
|
|
|
1572 |
|
|
@item spu_auto_overlay
|
1573 |
|
|
SPU target has toolchain that supports automatic overlay generation.
|
1574 |
|
|
|
1575 |
|
|
@item powerpc_vsx_ok
|
1576 |
|
|
PowerPC target supports @code{-mvsx}.
|
1577 |
|
|
|
1578 |
|
|
@item powerpc_405_nocache
|
1579 |
|
|
Including the options used to compile this particular test, the
|
1580 |
|
|
PowerPC target supports PowerPC 405.
|
1581 |
|
|
|
1582 |
|
|
@item vmx_hw
|
1583 |
|
|
PowerPC target supports executing AltiVec instructions.
|
1584 |
|
|
@end table
|
1585 |
|
|
|
1586 |
|
|
@subsubsection Other hardware attributes
|
1587 |
|
|
|
1588 |
|
|
@table @code
|
1589 |
|
|
@item avx
|
1590 |
|
|
Target supports compiling AVX instructions.
|
1591 |
|
|
|
1592 |
|
|
@item cell_hw
|
1593 |
|
|
Test system can execute AltiVec and Cell PPU instructions.
|
1594 |
|
|
|
1595 |
|
|
@item coldfire_fpu
|
1596 |
|
|
Target uses a ColdFire FPU.
|
1597 |
|
|
|
1598 |
|
|
@item hard_float
|
1599 |
|
|
Target supports FPU instructions.
|
1600 |
|
|
|
1601 |
|
|
@item sse
|
1602 |
|
|
Target supports compiling @code{sse} instructions.
|
1603 |
|
|
|
1604 |
|
|
@item sse_runtime
|
1605 |
|
|
Target supports the execution of @code{sse} instructions.
|
1606 |
|
|
|
1607 |
|
|
@item sse2
|
1608 |
|
|
Target supports compiling @code{sse2} instructions.
|
1609 |
|
|
|
1610 |
|
|
@item sse2_runtime
|
1611 |
|
|
Target supports the execution of @code{sse2} instructions.
|
1612 |
|
|
|
1613 |
|
|
@item sync_char_short
|
1614 |
|
|
Target supports atomic operations on @code{char} and @code{short}.
|
1615 |
|
|
|
1616 |
|
|
@item sync_int_long
|
1617 |
|
|
Target supports atomic operations on @code{int} and @code{long}.
|
1618 |
|
|
|
1619 |
|
|
@item ultrasparc_hw
|
1620 |
|
|
Test environment appears to run executables on a simulator that
|
1621 |
|
|
accepts only @code{EM_SPARC} executables and chokes on @code{EM_SPARC32PLUS}
|
1622 |
|
|
or @code{EM_SPARCV9} executables.
|
1623 |
|
|
|
1624 |
|
|
@item vect_cmdline_needed
|
1625 |
|
|
Target requires a command line argument to enable a SIMD instruction set.
|
1626 |
|
|
@end table
|
1627 |
|
|
|
1628 |
|
|
@subsubsection Environment attributes
|
1629 |
|
|
|
1630 |
|
|
@table @code
|
1631 |
|
|
@item c
|
1632 |
|
|
The language for the compiler under test is C.
|
1633 |
|
|
|
1634 |
|
|
@item c++
|
1635 |
|
|
The language for the compiler under test is C++.
|
1636 |
|
|
|
1637 |
|
|
@item c99_runtime
|
1638 |
|
|
Target provides a full C99 runtime.
|
1639 |
|
|
|
1640 |
|
|
@item correct_iso_cpp_string_wchar_protos
|
1641 |
|
|
Target @code{string.h} and @code{wchar.h} headers provide C++ required
|
1642 |
|
|
overloads for @code{strchr} etc. functions.
|
1643 |
|
|
|
1644 |
|
|
@item dummy_wcsftime
|
1645 |
|
|
Target uses a dummy @code{wcsftime} function that always returns zero.
|
1646 |
|
|
|
1647 |
|
|
@item fd_truncate
|
1648 |
|
|
Target can truncate a file from a file descriptor, as used by
|
1649 |
|
|
@file{libgfortran/io/unix.c:fd_truncate}; i.e. @code{ftruncate} or
|
1650 |
|
|
@code{chsize}.
|
1651 |
|
|
|
1652 |
|
|
@item freestanding
|
1653 |
|
|
Target is @samp{freestanding} as defined in section 4 of the C99 standard.
|
1654 |
|
|
Effectively, it is a target which supports no extra headers or libraries
|
1655 |
|
|
other than what is considered essential.
|
1656 |
|
|
|
1657 |
|
|
@item init_priority
|
1658 |
|
|
Target supports constructors with initialization priority arguments.
|
1659 |
|
|
|
1660 |
|
|
@item inttypes_types
|
1661 |
|
|
Target has the basic signed and unsigned types in @code{inttypes.h}.
|
1662 |
|
|
This is for tests that GCC's notions of these types agree with those
|
1663 |
|
|
in the header, as some systems have only @code{inttypes.h}.
|
1664 |
|
|
|
1665 |
|
|
@item lax_strtofp
|
1666 |
|
|
Target might have errors of a few ULP in string to floating-point
|
1667 |
|
|
conversion functions and overflow is not always detected correctly by
|
1668 |
|
|
those functions.
|
1669 |
|
|
|
1670 |
|
|
@item newlib
|
1671 |
|
|
Target supports Newlib.
|
1672 |
|
|
|
1673 |
|
|
@item pow10
|
1674 |
|
|
Target provides @code{pow10} function.
|
1675 |
|
|
|
1676 |
|
|
@item pthread
|
1677 |
|
|
Target can compile using @code{pthread.h} with no errors or warnings.
|
1678 |
|
|
|
1679 |
|
|
@item pthread_h
|
1680 |
|
|
Target has @code{pthread.h}.
|
1681 |
|
|
|
1682 |
|
|
@item simulator
|
1683 |
|
|
Test system runs executables on a simulator (i.e. slowly) rather than
|
1684 |
|
|
hardware (i.e. fast).
|
1685 |
|
|
|
1686 |
|
|
@item stdint_types
|
1687 |
|
|
Target has the basic signed and unsigned C types in @code{stdint.h}.
|
1688 |
|
|
This will be obsolete when GCC ensures a working @code{stdint.h} for
|
1689 |
|
|
all targets.
|
1690 |
|
|
|
1691 |
|
|
@item trampolines
|
1692 |
|
|
Target supports trampolines.
|
1693 |
|
|
|
1694 |
|
|
@item uclibc
|
1695 |
|
|
Target supports uClibc.
|
1696 |
|
|
|
1697 |
|
|
@item unwrapped
|
1698 |
|
|
Target does not use a status wrapper.
|
1699 |
|
|
|
1700 |
|
|
@item vxworks_kernel
|
1701 |
|
|
Target is a VxWorks kernel.
|
1702 |
|
|
|
1703 |
|
|
@item vxworks_rtp
|
1704 |
|
|
Target is a VxWorks RTP.
|
1705 |
|
|
|
1706 |
|
|
@item wchar
|
1707 |
|
|
Target supports wide characters.
|
1708 |
|
|
@end table
|
1709 |
|
|
|
1710 |
|
|
@subsubsection Other attributes
|
1711 |
|
|
|
1712 |
|
|
@table @code
|
1713 |
|
|
@item automatic_stack_alignment
|
1714 |
|
|
Target supports automatic stack alignment.
|
1715 |
|
|
|
1716 |
|
|
@item cxa_atexit
|
1717 |
|
|
Target uses @code{__cxa_atexit}.
|
1718 |
|
|
|
1719 |
|
|
@item default_packed
|
1720 |
|
|
Target has packed layout of structure members by default.
|
1721 |
|
|
|
1722 |
|
|
@item fgraphite
|
1723 |
|
|
Target supports Graphite optimizations.
|
1724 |
|
|
|
1725 |
|
|
@item fixed_point
|
1726 |
|
|
Target supports fixed-point extension to C.
|
1727 |
|
|
|
1728 |
|
|
@item fopenmp
|
1729 |
|
|
Target supports OpenMP via @option{-fopenmp}.
|
1730 |
|
|
|
1731 |
|
|
@item fpic
|
1732 |
|
|
Target supports @option{-fpic} and @option{-fPIC}.
|
1733 |
|
|
|
1734 |
|
|
@item freorder
|
1735 |
|
|
Target supports @option{-freorder-blocks-and-partition}.
|
1736 |
|
|
|
1737 |
|
|
@item fstack_protector
|
1738 |
|
|
Target supports @option{-fstack-protector}.
|
1739 |
|
|
|
1740 |
|
|
@item gas
|
1741 |
|
|
Target uses GNU @command{as}.
|
1742 |
|
|
|
1743 |
|
|
@item gc_sections
|
1744 |
|
|
Target supports @option{--gc-sections}.
|
1745 |
|
|
|
1746 |
|
|
@item keeps_null_pointer_checks
|
1747 |
|
|
Target keeps null pointer checks, either due to the use of
|
1748 |
|
|
@option{-fno-delete-null-pointer-checks} or hardwired into the target.
|
1749 |
|
|
|
1750 |
|
|
@item lto
|
1751 |
|
|
Compiler has been configured to support link-time optimization (LTO).
|
1752 |
|
|
|
1753 |
|
|
@item named_sections
|
1754 |
|
|
Target supports named sections.
|
1755 |
|
|
|
1756 |
|
|
@item natural_alignment_32
|
1757 |
|
|
Target uses natural alignment (aligned to type size) for types of
|
1758 |
|
|
32 bits or less.
|
1759 |
|
|
|
1760 |
|
|
@item target_natural_alignment_64
|
1761 |
|
|
Target uses natural alignment (aligned to type size) for types of
|
1762 |
|
|
64 bits or less.
|
1763 |
|
|
|
1764 |
|
|
@item nonpic
|
1765 |
|
|
Target does not generate PIC by default.
|
1766 |
|
|
|
1767 |
|
|
@item pcc_bitfield_type_matters
|
1768 |
|
|
Target defines @code{PCC_BITFIELD_TYPE_MATTERS}.
|
1769 |
|
|
|
1770 |
|
|
@item pe_aligned_commons
|
1771 |
|
|
Target supports @option{-mpe-aligned-commons}.
|
1772 |
|
|
|
1773 |
|
|
@item section_anchors
|
1774 |
|
|
Target supports section anchors.
|
1775 |
|
|
|
1776 |
|
|
@item short_enums
|
1777 |
|
|
Target defaults to short enums.
|
1778 |
|
|
|
1779 |
|
|
@item static
|
1780 |
|
|
Target supports @option{-static}.
|
1781 |
|
|
|
1782 |
|
|
@item static_libgfortran
|
1783 |
|
|
Target supports statically linking @samp{libgfortran}.
|
1784 |
|
|
|
1785 |
|
|
@item string_merging
|
1786 |
|
|
Target supports merging string constants at link time.
|
1787 |
|
|
|
1788 |
|
|
@item ucn
|
1789 |
|
|
Target supports compiling and assembling UCN.
|
1790 |
|
|
|
1791 |
|
|
@item ucn_nocache
|
1792 |
|
|
Including the options used to compile this particular test, the
|
1793 |
|
|
target supports compiling and assembling UCN.
|
1794 |
|
|
|
1795 |
|
|
@item unaligned_stack
|
1796 |
|
|
Target does not guarantee that its @code{STACK_BOUNDARY} is greater than
|
1797 |
|
|
or equal to the required vector alignment.
|
1798 |
|
|
|
1799 |
|
|
@item vector_alignment_reachable
|
1800 |
|
|
Vector alignment is reachable for types of 32 bits or less.
|
1801 |
|
|
|
1802 |
|
|
@item vector_alignment_reachable_for_64bit
|
1803 |
|
|
Vector alignment is reachable for types of 64 bits or less.
|
1804 |
|
|
|
1805 |
|
|
@item wchar_t_char16_t_compatible
|
1806 |
|
|
Target supports @code{wchar_t} that is compatible with @code{char16_t}.
|
1807 |
|
|
|
1808 |
|
|
@item wchar_t_char32_t_compatible
|
1809 |
|
|
Target supports @code{wchar_t} that is compatible with @code{char32_t}.
|
1810 |
|
|
@end table
|
1811 |
|
|
|
1812 |
|
|
@subsubsection Local to tests in @code{gcc.target/i386}
|
1813 |
|
|
|
1814 |
|
|
@table @code
|
1815 |
|
|
@item 3dnow
|
1816 |
|
|
Target supports compiling @code{3dnow} instructions.
|
1817 |
|
|
|
1818 |
|
|
@item aes
|
1819 |
|
|
Target supports compiling @code{aes} instructions.
|
1820 |
|
|
|
1821 |
|
|
@item fma4
|
1822 |
|
|
Target supports compiling @code{fma4} instructions.
|
1823 |
|
|
|
1824 |
|
|
@item ms_hook_prologue
|
1825 |
|
|
Target supports attribute @code{ms_hook_prologue}.
|
1826 |
|
|
|
1827 |
|
|
@item pclmul
|
1828 |
|
|
Target supports compiling @code{pclmul} instructions.
|
1829 |
|
|
|
1830 |
|
|
@item sse3
|
1831 |
|
|
Target supports compiling @code{sse3} instructions.
|
1832 |
|
|
|
1833 |
|
|
@item sse4
|
1834 |
|
|
Target supports compiling @code{sse4} instructions.
|
1835 |
|
|
|
1836 |
|
|
@item sse4a
|
1837 |
|
|
Target supports compiling @code{sse4a} instructions.
|
1838 |
|
|
|
1839 |
|
|
@item ssse3
|
1840 |
|
|
Target supports compiling @code{ssse3} instructions.
|
1841 |
|
|
|
1842 |
|
|
@item vaes
|
1843 |
|
|
Target supports compiling @code{vaes} instructions.
|
1844 |
|
|
|
1845 |
|
|
@item vpclmul
|
1846 |
|
|
Target supports compiling @code{vpclmul} instructions.
|
1847 |
|
|
|
1848 |
|
|
@item xop
|
1849 |
|
|
Target supports compiling @code{xop} instructions.
|
1850 |
|
|
@end table
|
1851 |
|
|
|
1852 |
|
|
@subsubsection Local to tests in @code{gcc.target/spu/ea}
|
1853 |
|
|
|
1854 |
|
|
@table @code
|
1855 |
|
|
@item ealib
|
1856 |
|
|
Target @code{__ea} library functions are available.
|
1857 |
|
|
@end table
|
1858 |
|
|
|
1859 |
|
|
@subsubsection Local to tests in @code{gcc.test-framework}
|
1860 |
|
|
|
1861 |
|
|
@table @code
|
1862 |
|
|
@item no
|
1863 |
|
|
Always returns 0.
|
1864 |
|
|
|
1865 |
|
|
@item yes
|
1866 |
|
|
Always returns 1.
|
1867 |
|
|
@end table
|
1868 |
|
|
|
1869 |
|
|
@node Add Options
|
1870 |
|
|
@subsection Features for @code{dg-add-options}
|
1871 |
|
|
|
1872 |
|
|
The supported values of @var{feature} for directive @code{dg-add-options}
|
1873 |
|
|
are:
|
1874 |
|
|
|
1875 |
|
|
@table @code
|
1876 |
|
|
@item bind_pic_locally
|
1877 |
|
|
Add the target-specific flags needed to enable functions to bind
|
1878 |
|
|
locally when using pic/PIC passes in the testsuite.
|
1879 |
|
|
|
1880 |
|
|
@item c99_runtime
|
1881 |
|
|
Add the target-specific flags needed to access the C99 runtime.
|
1882 |
|
|
|
1883 |
|
|
@item ieee
|
1884 |
|
|
Add the target-specific flags needed to enable full IEEE
|
1885 |
|
|
compliance mode.
|
1886 |
|
|
|
1887 |
|
|
@item mips16_attribute
|
1888 |
|
|
@code{mips16} function attributes.
|
1889 |
|
|
Only MIPS targets support this feature, and only then in certain modes.
|
1890 |
|
|
@end table
|
1891 |
|
|
|
1892 |
|
|
@node Require Support
|
1893 |
|
|
@subsection Variants of @code{dg-require-@var{support}}
|
1894 |
|
|
|
1895 |
|
|
A few of the @code{dg-require} directives take arguments.
|
1896 |
|
|
|
1897 |
|
|
@table @code
|
1898 |
|
|
@item dg-require-iconv @var{codeset}
|
1899 |
|
|
Skip the test if the target does not support iconv. @var{codeset} is
|
1900 |
|
|
the codeset to convert to.
|
1901 |
|
|
|
1902 |
|
|
@item dg-require-profiling @var{profopt}
|
1903 |
|
|
Skip the test if the target does not support profiling with option
|
1904 |
|
|
@var{profopt}.
|
1905 |
|
|
|
1906 |
|
|
@item dg-require-visibility @var{vis}
|
1907 |
|
|
Skip the test if the target does not support the @code{visibility} attribute.
|
1908 |
|
|
If @var{vis} is @code{""}, support for @code{visibility("hidden")} is
|
1909 |
|
|
checked, for @code{visibility("@var{vis}")} otherwise.
|
1910 |
|
|
@end table
|
1911 |
|
|
|
1912 |
|
|
The original @code{dg-require} directives were defined before there
|
1913 |
|
|
was support for effective-target keywords. The directives that do not
|
1914 |
|
|
take arguments could be replaced with effective-target keywords.
|
1915 |
|
|
|
1916 |
|
|
@table @code
|
1917 |
|
|
@item dg-require-alias ""
|
1918 |
|
|
Skip the test if the target does not support the @samp{alias} attribute.
|
1919 |
|
|
|
1920 |
|
|
@item dg-require-compat-dfp ""
|
1921 |
|
|
Skip this test unless both compilers in a @file{compat} testsuite
|
1922 |
|
|
support decimal floating point.
|
1923 |
|
|
|
1924 |
|
|
@item dg-require-cxa-atexit ""
|
1925 |
|
|
Skip the test if the target does not support @code{__cxa_atexit}.
|
1926 |
|
|
This is equivalent to @code{dg-require-effective-target cxa_atexit}.
|
1927 |
|
|
|
1928 |
|
|
@item dg-require-dll ""
|
1929 |
|
|
Skip the test if the target does not support DLL attributes.
|
1930 |
|
|
|
1931 |
|
|
@item dg-require-fork ""
|
1932 |
|
|
Skip the test if the target does not support @code{fork}.
|
1933 |
|
|
|
1934 |
|
|
@item dg-require-gc-sections ""
|
1935 |
|
|
Skip the test if the target's linker does not support the
|
1936 |
|
|
@code{--gc-sections} flags.
|
1937 |
|
|
This is equivalent to @code{dg-require-effective-target gc-sections}.
|
1938 |
|
|
|
1939 |
|
|
@item dg-require-host-local ""
|
1940 |
|
|
Skip the test if the host is remote, rather than the same as the build
|
1941 |
|
|
system. Some tests are incompatible with DejaGnu's handling of remote
|
1942 |
|
|
hosts, which involves copying the source file to the host and compiling
|
1943 |
|
|
it with a relative path and "@code{-o a.out}".
|
1944 |
|
|
|
1945 |
|
|
@item dg-require-mkfifo ""
|
1946 |
|
|
Skip the test if the target does not support @code{mkfifo}.
|
1947 |
|
|
|
1948 |
|
|
@item dg-require-named-sections ""
|
1949 |
|
|
Skip the test is the target does not support named sections.
|
1950 |
|
|
This is equivalent to @code{dg-require-effective-target named_sections}.
|
1951 |
|
|
|
1952 |
|
|
@item dg-require-weak ""
|
1953 |
|
|
Skip the test if the target does not support weak symbols.
|
1954 |
|
|
|
1955 |
|
|
@item dg-require-weak-override ""
|
1956 |
|
|
Skip the test if the target does not support overriding weak symbols.
|
1957 |
|
|
@end table
|
1958 |
|
|
|
1959 |
|
|
@node Final Actions
|
1960 |
|
|
@subsection Commands for use in @code{dg-final}
|
1961 |
|
|
|
1962 |
|
|
The GCC testsuite defines the following directives to be used within
|
1963 |
|
|
@code{dg-final}.
|
1964 |
|
|
|
1965 |
|
|
@subsubsection Scan a particular file
|
1966 |
|
|
|
1967 |
|
|
@table @code
|
1968 |
|
|
@item scan-file @var{filename} @var{regexp} [@{ target/xfail @var{selector} @}]
|
1969 |
|
|
Passes if @var{regexp} matches text in @var{filename}.
|
1970 |
|
|
@item scan-file-not @var{filename} @var{regexp} [@{ target/xfail @var{selector} @}]
|
1971 |
|
|
Passes if @var{regexp} does not match text in @var{filename}.
|
1972 |
|
|
@item scan-module @var{module} @var{regexp} [@{ target/xfail @var{selector} @}]
|
1973 |
|
|
Passes if @var{regexp} matches in Fortran module @var{module}.
|
1974 |
|
|
@end table
|
1975 |
|
|
|
1976 |
|
|
@subsubsection Scan the assembly output
|
1977 |
|
|
|
1978 |
|
|
@table @code
|
1979 |
|
|
@item scan-assembler @var{regex} [@{ target/xfail @var{selector} @}]
|
1980 |
|
|
Passes if @var{regex} matches text in the test's assembler output.
|
1981 |
|
|
|
1982 |
|
|
@item scan-assembler-not @var{regex} [@{ target/xfail @var{selector} @}]
|
1983 |
|
|
Passes if @var{regex} does not match text in the test's assembler output.
|
1984 |
|
|
|
1985 |
|
|
@item scan-assembler-times @var{regex} @var{num} [@{ target/xfail @var{selector} @}]
|
1986 |
|
|
Passes if @var{regex} is matched exactly @var{num} times in the test's
|
1987 |
|
|
assembler output.
|
1988 |
|
|
|
1989 |
|
|
@item scan-assembler-dem @var{regex} [@{ target/xfail @var{selector} @}]
|
1990 |
|
|
Passes if @var{regex} matches text in the test's demangled assembler output.
|
1991 |
|
|
|
1992 |
|
|
@item scan-assembler-dem-not @var{regex} [@{ target/xfail @var{selector} @}]
|
1993 |
|
|
Passes if @var{regex} does not match text in the test's demangled assembler
|
1994 |
|
|
output.
|
1995 |
|
|
|
1996 |
|
|
@item scan-hidden @var{symbol} [@{ target/xfail @var{selector} @}]
|
1997 |
|
|
Passes if @var{symbol} is defined as a hidden symbol in the test's
|
1998 |
|
|
assembly output.
|
1999 |
|
|
|
2000 |
|
|
@item scan-not-hidden @var{symbol} [@{ target/xfail @var{selector} @}]
|
2001 |
|
|
Passes if @var{symbol} is not defined as a hidden symbol in the test's
|
2002 |
|
|
assembly output.
|
2003 |
|
|
@end table
|
2004 |
|
|
|
2005 |
|
|
@subsubsection Scan optimization dump files
|
2006 |
|
|
|
2007 |
|
|
These commands are available for @var{kind} of @code{tree}, @code{rtl},
|
2008 |
|
|
and @code{ipa}.
|
2009 |
|
|
|
2010 |
|
|
@table @code
|
2011 |
|
|
@item scan-@var{kind}-dump @var{regex} @var{suffix} [@{ target/xfail @var{selector} @}]
|
2012 |
|
|
Passes if @var{regex} matches text in the dump file with suffix @var{suffix}.
|
2013 |
|
|
|
2014 |
|
|
@item scan-@var{kind}-dump-not @var{regex} @var{suffix} [@{ target/xfail @var{selector} @}]
|
2015 |
|
|
Passes if @var{regex} does not match text in the dump file with suffix
|
2016 |
|
|
@var{suffix}.
|
2017 |
|
|
|
2018 |
|
|
@item scan-@var{kind}-dump-times @var{regex} @var{num} @var{suffix} [@{ target/xfail @var{selector} @}]
|
2019 |
|
|
Passes if @var{regex} is found exactly @var{num} times in the dump file
|
2020 |
|
|
with suffix @var{suffix}.
|
2021 |
|
|
|
2022 |
|
|
@item scan-@var{kind}-dump-dem @var{regex} @var{suffix} [@{ target/xfail @var{selector} @}]
|
2023 |
|
|
Passes if @var{regex} matches demangled text in the dump file with
|
2024 |
|
|
suffix @var{suffix}.
|
2025 |
|
|
|
2026 |
|
|
@item scan-@var{kind}-dump-dem-not @var{regex} @var{suffix} [@{ target/xfail @var{selector} @}]
|
2027 |
|
|
Passes if @var{regex} does not match demangled text in the dump file with
|
2028 |
|
|
suffix @var{suffix}.
|
2029 |
|
|
@end table
|
2030 |
|
|
|
2031 |
|
|
@subsubsection Verify that an output files exists or not
|
2032 |
|
|
|
2033 |
|
|
@table @code
|
2034 |
|
|
@item output-exists [@{ target/xfail @var{selector} @}]
|
2035 |
|
|
Passes if compiler output file exists.
|
2036 |
|
|
|
2037 |
|
|
@item output-exists-not [@{ target/xfail @var{selector} @}]
|
2038 |
|
|
Passes if compiler output file does not exist.
|
2039 |
|
|
@end table
|
2040 |
|
|
|
2041 |
|
|
@subsubsection Check for LTO tests
|
2042 |
|
|
|
2043 |
|
|
@table @code
|
2044 |
|
|
@item scan-symbol @var{regexp} [@{ target/xfail @var{selector} @}]
|
2045 |
|
|
Passes if the pattern is present in the final executable.
|
2046 |
|
|
@end table
|
2047 |
|
|
|
2048 |
|
|
@subsubsection Checks for @command{gcov} tests
|
2049 |
|
|
|
2050 |
|
|
@table @code
|
2051 |
|
|
@item run-gcov @var{sourcefile}
|
2052 |
|
|
Check line counts in @command{gcov} tests.
|
2053 |
|
|
|
2054 |
|
|
@item run-gcov [branches] [calls] @{ @var{opts} @var{sourcefile} @}
|
2055 |
|
|
Check branch and/or call counts, in addition to line counts, in
|
2056 |
|
|
@command{gcov} tests.
|
2057 |
|
|
@end table
|
2058 |
|
|
|
2059 |
|
|
@subsubsection Clean up generated test files
|
2060 |
|
|
|
2061 |
|
|
@table @code
|
2062 |
|
|
@item cleanup-coverage-files
|
2063 |
|
|
Removes coverage data files generated for this test.
|
2064 |
|
|
|
2065 |
|
|
@item cleanup-ipa-dump @var{suffix}
|
2066 |
|
|
Removes IPA dump files generated for this test.
|
2067 |
|
|
|
2068 |
|
|
@item cleanup-modules
|
2069 |
|
|
Removes Fortran module files generated for this test.
|
2070 |
|
|
|
2071 |
|
|
@item cleanup-profile-file
|
2072 |
|
|
Removes profiling files generated for this test.
|
2073 |
|
|
|
2074 |
|
|
@item cleanup-repo-files
|
2075 |
|
|
Removes files generated for this test for @option{-frepo}.
|
2076 |
|
|
|
2077 |
|
|
@item cleanup-rtl-dump @var{suffix}
|
2078 |
|
|
Removes RTL dump files generated for this test.
|
2079 |
|
|
|
2080 |
|
|
@item cleanup-saved-temps
|
2081 |
|
|
Removes files for the current test which were kept for @option{-save-temps}.
|
2082 |
|
|
|
2083 |
|
|
@item cleanup-tree-dump @var{suffix}
|
2084 |
|
|
Removes tree dump files matching @var{suffix} which were generated for
|
2085 |
|
|
this test.
|
2086 |
|
|
@end table
|
2087 |
|
|
|
2088 |
|
|
@node Ada Tests
|
2089 |
|
|
@section Ada Language Testsuites
|
2090 |
|
|
|
2091 |
|
|
The Ada testsuite includes executable tests from the ACATS 2.5
|
2092 |
|
|
testsuite, publicly available at
|
2093 |
|
|
@uref{http://www.adaic.org/compilers/acats/2.5}.
|
2094 |
|
|
|
2095 |
|
|
These tests are integrated in the GCC testsuite in the
|
2096 |
|
|
@file{ada/acats} directory, and
|
2097 |
|
|
enabled automatically when running @code{make check}, assuming
|
2098 |
|
|
the Ada language has been enabled when configuring GCC@.
|
2099 |
|
|
|
2100 |
|
|
You can also run the Ada testsuite independently, using
|
2101 |
|
|
@code{make check-ada}, or run a subset of the tests by specifying which
|
2102 |
|
|
chapter to run, e.g.:
|
2103 |
|
|
|
2104 |
|
|
@smallexample
|
2105 |
|
|
$ make check-ada CHAPTERS="c3 c9"
|
2106 |
|
|
@end smallexample
|
2107 |
|
|
|
2108 |
|
|
The tests are organized by directory, each directory corresponding to
|
2109 |
|
|
a chapter of the Ada Reference Manual. So for example, @file{c9} corresponds
|
2110 |
|
|
to chapter 9, which deals with tasking features of the language.
|
2111 |
|
|
|
2112 |
|
|
There is also an extra chapter called @file{gcc} containing a template for
|
2113 |
|
|
creating new executable tests, although this is deprecated in favor of
|
2114 |
|
|
the @file{gnat.dg} testsuite.
|
2115 |
|
|
|
2116 |
|
|
The tests are run using two @command{sh} scripts: @file{run_acats} and
|
2117 |
|
|
@file{run_all.sh}. To run the tests using a simulator or a cross
|
2118 |
|
|
target, see the small
|
2119 |
|
|
customization section at the top of @file{run_all.sh}.
|
2120 |
|
|
|
2121 |
|
|
These tests are run using the build tree: they can be run without doing
|
2122 |
|
|
a @code{make install}.
|
2123 |
|
|
|
2124 |
|
|
@node C Tests
|
2125 |
|
|
@section C Language Testsuites
|
2126 |
|
|
|
2127 |
|
|
GCC contains the following C language testsuites, in the
|
2128 |
|
|
@file{gcc/testsuite} directory:
|
2129 |
|
|
|
2130 |
|
|
@table @file
|
2131 |
|
|
@item gcc.dg
|
2132 |
|
|
This contains tests of particular features of the C compiler, using the
|
2133 |
|
|
more modern @samp{dg} harness. Correctness tests for various compiler
|
2134 |
|
|
features should go here if possible.
|
2135 |
|
|
|
2136 |
|
|
Magic comments determine whether the file
|
2137 |
|
|
is preprocessed, compiled, linked or run. In these tests, error and warning
|
2138 |
|
|
message texts are compared against expected texts or regular expressions
|
2139 |
|
|
given in comments. These tests are run with the options @samp{-ansi -pedantic}
|
2140 |
|
|
unless other options are given in the test. Except as noted below they
|
2141 |
|
|
are not run with multiple optimization options.
|
2142 |
|
|
@item gcc.dg/compat
|
2143 |
|
|
This subdirectory contains tests for binary compatibility using
|
2144 |
|
|
@file{lib/compat.exp}, which in turn uses the language-independent support
|
2145 |
|
|
(@pxref{compat Testing, , Support for testing binary compatibility}).
|
2146 |
|
|
@item gcc.dg/cpp
|
2147 |
|
|
This subdirectory contains tests of the preprocessor.
|
2148 |
|
|
@item gcc.dg/debug
|
2149 |
|
|
This subdirectory contains tests for debug formats. Tests in this
|
2150 |
|
|
subdirectory are run for each debug format that the compiler supports.
|
2151 |
|
|
@item gcc.dg/format
|
2152 |
|
|
This subdirectory contains tests of the @option{-Wformat} format
|
2153 |
|
|
checking. Tests in this directory are run with and without
|
2154 |
|
|
@option{-DWIDE}.
|
2155 |
|
|
@item gcc.dg/noncompile
|
2156 |
|
|
This subdirectory contains tests of code that should not compile and
|
2157 |
|
|
does not need any special compilation options. They are run with
|
2158 |
|
|
multiple optimization options, since sometimes invalid code crashes
|
2159 |
|
|
the compiler with optimization.
|
2160 |
|
|
@item gcc.dg/special
|
2161 |
|
|
FIXME: describe this.
|
2162 |
|
|
|
2163 |
|
|
@item gcc.c-torture
|
2164 |
|
|
This contains particular code fragments which have historically broken easily.
|
2165 |
|
|
These tests are run with multiple optimization options, so tests for features
|
2166 |
|
|
which only break at some optimization levels belong here. This also contains
|
2167 |
|
|
tests to check that certain optimizations occur. It might be worthwhile to
|
2168 |
|
|
separate the correctness tests cleanly from the code quality tests, but
|
2169 |
|
|
it hasn't been done yet.
|
2170 |
|
|
|
2171 |
|
|
@item gcc.c-torture/compat
|
2172 |
|
|
FIXME: describe this.
|
2173 |
|
|
|
2174 |
|
|
This directory should probably not be used for new tests.
|
2175 |
|
|
@item gcc.c-torture/compile
|
2176 |
|
|
This testsuite contains test cases that should compile, but do not
|
2177 |
|
|
need to link or run. These test cases are compiled with several
|
2178 |
|
|
different combinations of optimization options. All warnings are
|
2179 |
|
|
disabled for these test cases, so this directory is not suitable if
|
2180 |
|
|
you wish to test for the presence or absence of compiler warnings.
|
2181 |
|
|
While special options can be set, and tests disabled on specific
|
2182 |
|
|
platforms, by the use of @file{.x} files, mostly these test cases
|
2183 |
|
|
should not contain platform dependencies. FIXME: discuss how defines
|
2184 |
|
|
such as @code{NO_LABEL_VALUES} and @code{STACK_SIZE} are used.
|
2185 |
|
|
@item gcc.c-torture/execute
|
2186 |
|
|
This testsuite contains test cases that should compile, link and run;
|
2187 |
|
|
otherwise the same comments as for @file{gcc.c-torture/compile} apply.
|
2188 |
|
|
@item gcc.c-torture/execute/ieee
|
2189 |
|
|
This contains tests which are specific to IEEE floating point.
|
2190 |
|
|
@item gcc.c-torture/unsorted
|
2191 |
|
|
FIXME: describe this.
|
2192 |
|
|
|
2193 |
|
|
This directory should probably not be used for new tests.
|
2194 |
|
|
@item gcc.misc-tests
|
2195 |
|
|
This directory contains C tests that require special handling. Some
|
2196 |
|
|
of these tests have individual expect files, and others share
|
2197 |
|
|
special-purpose expect files:
|
2198 |
|
|
|
2199 |
|
|
@table @file
|
2200 |
|
|
@item @code{bprob*.c}
|
2201 |
|
|
Test @option{-fbranch-probabilities} using
|
2202 |
|
|
@file{gcc.misc-tests/bprob.exp}, which
|
2203 |
|
|
in turn uses the generic, language-independent framework
|
2204 |
|
|
(@pxref{profopt Testing, , Support for testing profile-directed
|
2205 |
|
|
optimizations}).
|
2206 |
|
|
|
2207 |
|
|
@item @code{gcov*.c}
|
2208 |
|
|
Test @command{gcov} output using @file{gcov.exp}, which in turn uses the
|
2209 |
|
|
language-independent support (@pxref{gcov Testing, , Support for testing gcov}).
|
2210 |
|
|
|
2211 |
|
|
@item @code{i386-pf-*.c}
|
2212 |
|
|
Test i386-specific support for data prefetch using @file{i386-prefetch.exp}.
|
2213 |
|
|
@end table
|
2214 |
|
|
|
2215 |
|
|
@item gcc.test-framework
|
2216 |
|
|
@table @file
|
2217 |
|
|
@item @code{dg-*.c}
|
2218 |
|
|
Test the testsuite itself using @file{gcc.test-framework/test-framework.exp}.
|
2219 |
|
|
@end table
|
2220 |
|
|
|
2221 |
|
|
@end table
|
2222 |
|
|
|
2223 |
|
|
FIXME: merge in @file{testsuite/README.gcc} and discuss the format of
|
2224 |
|
|
test cases and magic comments more.
|
2225 |
|
|
|
2226 |
|
|
@node libgcj Tests
|
2227 |
|
|
@section The Java library testsuites.
|
2228 |
|
|
|
2229 |
|
|
Runtime tests are executed via @samp{make check} in the
|
2230 |
|
|
@file{@var{target}/libjava/testsuite} directory in the build
|
2231 |
|
|
tree. Additional runtime tests can be checked into this testsuite.
|
2232 |
|
|
|
2233 |
|
|
Regression testing of the core packages in libgcj is also covered by the
|
2234 |
|
|
Mauve testsuite. The @uref{http://sourceware.org/mauve/,,Mauve Project}
|
2235 |
|
|
develops tests for the Java Class Libraries. These tests are run as part
|
2236 |
|
|
of libgcj testing by placing the Mauve tree within the libjava testsuite
|
2237 |
|
|
sources at @file{libjava/testsuite/libjava.mauve/mauve}, or by specifying
|
2238 |
|
|
the location of that tree when invoking @samp{make}, as in
|
2239 |
|
|
@samp{make MAUVEDIR=~/mauve check}.
|
2240 |
|
|
|
2241 |
|
|
To detect regressions, a mechanism in @file{mauve.exp} compares the
|
2242 |
|
|
failures for a test run against the list of expected failures in
|
2243 |
|
|
@file{libjava/testsuite/libjava.mauve/xfails} from the source hierarchy.
|
2244 |
|
|
Update this file when adding new failing tests to Mauve, or when fixing
|
2245 |
|
|
bugs in libgcj that had caused Mauve test failures.
|
2246 |
|
|
|
2247 |
|
|
We encourage developers to contribute test cases to Mauve.
|
2248 |
|
|
|
2249 |
|
|
@node LTO Testing
|
2250 |
|
|
@section Support for testing link-time optimizations
|
2251 |
|
|
|
2252 |
|
|
Tests for link-time optimizations usually require multiple source files
|
2253 |
|
|
that are compiled separately, perhaps with different sets of options.
|
2254 |
|
|
There are several special-purpose test directives used for these tests.
|
2255 |
|
|
|
2256 |
|
|
@table @code
|
2257 |
|
|
@item @{ dg-lto-do @var{do-what-keyword} @}
|
2258 |
|
|
@var{do-what-keyword} specifies how the test is compiled and whether
|
2259 |
|
|
it is executed. It is one of:
|
2260 |
|
|
|
2261 |
|
|
@table @code
|
2262 |
|
|
@item assemble
|
2263 |
|
|
Compile with @option{-c} to produce a relocatable object file.
|
2264 |
|
|
@item link
|
2265 |
|
|
Compile, assemble, and link to produce an executable file.
|
2266 |
|
|
@item run
|
2267 |
|
|
Produce and run an executable file, which is expected to return
|
2268 |
|
|
an exit code of 0.
|
2269 |
|
|
@end table
|
2270 |
|
|
|
2271 |
|
|
The default is @code{assemble}. That can be overridden for a set of
|
2272 |
|
|
tests by redefining @code{dg-do-what-default} within the @code{.exp}
|
2273 |
|
|
file for those tests.
|
2274 |
|
|
|
2275 |
|
|
Unlike @code{dg-do}, @code{dg-lto-do} does not support an optional
|
2276 |
|
|
@samp{target} or @samp{xfail} list. Use @code{dg-skip-if},
|
2277 |
|
|
@code{dg-xfail-if}, or @code{dg-xfail-run-if}.
|
2278 |
|
|
|
2279 |
|
|
@item @{ dg-lto-options @{ @{ @var{options} @} [@{ @var{options} @}] @} [@{ target @var{selector} @}]@}
|
2280 |
|
|
This directive provides a list of one or more sets of compiler options
|
2281 |
|
|
to override @var{LTO_OPTIONS}. Each test will be compiled and run with
|
2282 |
|
|
each of these sets of options.
|
2283 |
|
|
|
2284 |
|
|
@item @{ dg-extra-ld-options @var{options} @}
|
2285 |
|
|
This directive adds @var{options} to the linker options used.
|
2286 |
|
|
|
2287 |
|
|
@item @{ dg-suppress-ld-options @var{options} @}
|
2288 |
|
|
This directive removes @var{options} from the set of linker options used.
|
2289 |
|
|
@end table
|
2290 |
|
|
|
2291 |
|
|
@node gcov Testing
|
2292 |
|
|
@section Support for testing @command{gcov}
|
2293 |
|
|
|
2294 |
|
|
Language-independent support for testing @command{gcov}, and for checking
|
2295 |
|
|
that branch profiling produces expected values, is provided by the
|
2296 |
|
|
expect file @file{lib/gcov.exp}. @command{gcov} tests also rely on procedures
|
2297 |
|
|
in @file{lib/gcc-dg.exp} to compile and run the test program. A typical
|
2298 |
|
|
@command{gcov} test contains the following DejaGnu commands within comments:
|
2299 |
|
|
|
2300 |
|
|
@smallexample
|
2301 |
|
|
@{ dg-options "-fprofile-arcs -ftest-coverage" @}
|
2302 |
|
|
@{ dg-do run @{ target native @} @}
|
2303 |
|
|
@{ dg-final @{ run-gcov sourcefile @} @}
|
2304 |
|
|
@end smallexample
|
2305 |
|
|
|
2306 |
|
|
Checks of @command{gcov} output can include line counts, branch percentages,
|
2307 |
|
|
and call return percentages. All of these checks are requested via
|
2308 |
|
|
commands that appear in comments in the test's source file.
|
2309 |
|
|
Commands to check line counts are processed by default.
|
2310 |
|
|
Commands to check branch percentages and call return percentages are
|
2311 |
|
|
processed if the @command{run-gcov} command has arguments @code{branches}
|
2312 |
|
|
or @code{calls}, respectively. For example, the following specifies
|
2313 |
|
|
checking both, as well as passing @option{-b} to @command{gcov}:
|
2314 |
|
|
|
2315 |
|
|
@smallexample
|
2316 |
|
|
@{ dg-final @{ run-gcov branches calls @{ -b sourcefile @} @} @}
|
2317 |
|
|
@end smallexample
|
2318 |
|
|
|
2319 |
|
|
A line count command appears within a comment on the source line
|
2320 |
|
|
that is expected to get the specified count and has the form
|
2321 |
|
|
@code{count(@var{cnt})}. A test should only check line counts for
|
2322 |
|
|
lines that will get the same count for any architecture.
|
2323 |
|
|
|
2324 |
|
|
Commands to check branch percentages (@code{branch}) and call
|
2325 |
|
|
return percentages (@code{returns}) are very similar to each other.
|
2326 |
|
|
A beginning command appears on or before the first of a range of
|
2327 |
|
|
lines that will report the percentage, and the ending command
|
2328 |
|
|
follows that range of lines. The beginning command can include a
|
2329 |
|
|
list of percentages, all of which are expected to be found within
|
2330 |
|
|
the range. A range is terminated by the next command of the same
|
2331 |
|
|
kind. A command @code{branch(end)} or @code{returns(end)} marks
|
2332 |
|
|
the end of a range without starting a new one. For example:
|
2333 |
|
|
|
2334 |
|
|
@smallexample
|
2335 |
|
|
if (i > 10 && j > i && j < 20) /* @r{branch(27 50 75)} */
|
2336 |
|
|
/* @r{branch(end)} */
|
2337 |
|
|
foo (i, j);
|
2338 |
|
|
@end smallexample
|
2339 |
|
|
|
2340 |
|
|
For a call return percentage, the value specified is the
|
2341 |
|
|
percentage of calls reported to return. For a branch percentage,
|
2342 |
|
|
the value is either the expected percentage or 100 minus that
|
2343 |
|
|
value, since the direction of a branch can differ depending on the
|
2344 |
|
|
target or the optimization level.
|
2345 |
|
|
|
2346 |
|
|
Not all branches and calls need to be checked. A test should not
|
2347 |
|
|
check for branches that might be optimized away or replaced with
|
2348 |
|
|
predicated instructions. Don't check for calls inserted by the
|
2349 |
|
|
compiler or ones that might be inlined or optimized away.
|
2350 |
|
|
|
2351 |
|
|
A single test can check for combinations of line counts, branch
|
2352 |
|
|
percentages, and call return percentages. The command to check a
|
2353 |
|
|
line count must appear on the line that will report that count, but
|
2354 |
|
|
commands to check branch percentages and call return percentages can
|
2355 |
|
|
bracket the lines that report them.
|
2356 |
|
|
|
2357 |
|
|
@node profopt Testing
|
2358 |
|
|
@section Support for testing profile-directed optimizations
|
2359 |
|
|
|
2360 |
|
|
The file @file{profopt.exp} provides language-independent support for
|
2361 |
|
|
checking correct execution of a test built with profile-directed
|
2362 |
|
|
optimization. This testing requires that a test program be built and
|
2363 |
|
|
executed twice. The first time it is compiled to generate profile
|
2364 |
|
|
data, and the second time it is compiled to use the data that was
|
2365 |
|
|
generated during the first execution. The second execution is to
|
2366 |
|
|
verify that the test produces the expected results.
|
2367 |
|
|
|
2368 |
|
|
To check that the optimization actually generated better code, a
|
2369 |
|
|
test can be built and run a third time with normal optimizations to
|
2370 |
|
|
verify that the performance is better with the profile-directed
|
2371 |
|
|
optimizations. @file{profopt.exp} has the beginnings of this kind
|
2372 |
|
|
of support.
|
2373 |
|
|
|
2374 |
|
|
@file{profopt.exp} provides generic support for profile-directed
|
2375 |
|
|
optimizations. Each set of tests that uses it provides information
|
2376 |
|
|
about a specific optimization:
|
2377 |
|
|
|
2378 |
|
|
@table @code
|
2379 |
|
|
@item tool
|
2380 |
|
|
tool being tested, e.g., @command{gcc}
|
2381 |
|
|
|
2382 |
|
|
@item profile_option
|
2383 |
|
|
options used to generate profile data
|
2384 |
|
|
|
2385 |
|
|
@item feedback_option
|
2386 |
|
|
options used to optimize using that profile data
|
2387 |
|
|
|
2388 |
|
|
@item prof_ext
|
2389 |
|
|
suffix of profile data files
|
2390 |
|
|
|
2391 |
|
|
@item PROFOPT_OPTIONS
|
2392 |
|
|
list of options with which to run each test, similar to the lists for
|
2393 |
|
|
torture tests
|
2394 |
|
|
|
2395 |
|
|
@item @{ dg-final-generate @{ @var{local-directive} @} @}
|
2396 |
|
|
This directive is similar to @code{dg-final}, but the
|
2397 |
|
|
@var{local-directive} is run after the generation of profile data.
|
2398 |
|
|
|
2399 |
|
|
@item @{ dg-final-use @{ @var{local-directive} @} @}
|
2400 |
|
|
The @var{local-directive} is run after the profile data have been
|
2401 |
|
|
used.
|
2402 |
|
|
@end table
|
2403 |
|
|
|
2404 |
|
|
@node compat Testing
|
2405 |
|
|
@section Support for testing binary compatibility
|
2406 |
|
|
|
2407 |
|
|
The file @file{compat.exp} provides language-independent support for
|
2408 |
|
|
binary compatibility testing. It supports testing interoperability of
|
2409 |
|
|
two compilers that follow the same ABI, or of multiple sets of
|
2410 |
|
|
compiler options that should not affect binary compatibility. It is
|
2411 |
|
|
intended to be used for testsuites that complement ABI testsuites.
|
2412 |
|
|
|
2413 |
|
|
A test supported by this framework has three parts, each in a
|
2414 |
|
|
separate source file: a main program and two pieces that interact
|
2415 |
|
|
with each other to split up the functionality being tested.
|
2416 |
|
|
|
2417 |
|
|
@table @file
|
2418 |
|
|
@item @var{testname}_main.@var{suffix}
|
2419 |
|
|
Contains the main program, which calls a function in file
|
2420 |
|
|
@file{@var{testname}_x.@var{suffix}}.
|
2421 |
|
|
|
2422 |
|
|
@item @var{testname}_x.@var{suffix}
|
2423 |
|
|
Contains at least one call to a function in
|
2424 |
|
|
@file{@var{testname}_y.@var{suffix}}.
|
2425 |
|
|
|
2426 |
|
|
@item @var{testname}_y.@var{suffix}
|
2427 |
|
|
Shares data with, or gets arguments from,
|
2428 |
|
|
@file{@var{testname}_x.@var{suffix}}.
|
2429 |
|
|
@end table
|
2430 |
|
|
|
2431 |
|
|
Within each test, the main program and one functional piece are
|
2432 |
|
|
compiled by the GCC under test. The other piece can be compiled by
|
2433 |
|
|
an alternate compiler. If no alternate compiler is specified,
|
2434 |
|
|
then all three source files are all compiled by the GCC under test.
|
2435 |
|
|
You can specify pairs of sets of compiler options. The first element
|
2436 |
|
|
of such a pair specifies options used with the GCC under test, and the
|
2437 |
|
|
second element of the pair specifies options used with the alternate
|
2438 |
|
|
compiler. Each test is compiled with each pair of options.
|
2439 |
|
|
|
2440 |
|
|
@file{compat.exp} defines default pairs of compiler options.
|
2441 |
|
|
These can be overridden by defining the environment variable
|
2442 |
|
|
@env{COMPAT_OPTIONS} as:
|
2443 |
|
|
|
2444 |
|
|
@smallexample
|
2445 |
|
|
COMPAT_OPTIONS="[list [list @{@var{tst1}@} @{@var{alt1}@}]
|
2446 |
|
|
@dots{}[list @{@var{tstn}@} @{@var{altn}@}]]"
|
2447 |
|
|
@end smallexample
|
2448 |
|
|
|
2449 |
|
|
where @var{tsti} and @var{alti} are lists of options, with @var{tsti}
|
2450 |
|
|
used by the compiler under test and @var{alti} used by the alternate
|
2451 |
|
|
compiler. For example, with
|
2452 |
|
|
@code{[list [list @{-g -O0@} @{-O3@}] [list @{-fpic@} @{-fPIC -O2@}]]},
|
2453 |
|
|
the test is first built with @option{-g -O0} by the compiler under
|
2454 |
|
|
test and with @option{-O3} by the alternate compiler. The test is
|
2455 |
|
|
built a second time using @option{-fpic} by the compiler under test
|
2456 |
|
|
and @option{-fPIC -O2} by the alternate compiler.
|
2457 |
|
|
|
2458 |
|
|
An alternate compiler is specified by defining an environment
|
2459 |
|
|
variable to be the full pathname of an installed compiler; for C
|
2460 |
|
|
define @env{ALT_CC_UNDER_TEST}, and for C++ define
|
2461 |
|
|
@env{ALT_CXX_UNDER_TEST}. These will be written to the
|
2462 |
|
|
@file{site.exp} file used by DejaGnu. The default is to build each
|
2463 |
|
|
test with the compiler under test using the first of each pair of
|
2464 |
|
|
compiler options from @env{COMPAT_OPTIONS}. When
|
2465 |
|
|
@env{ALT_CC_UNDER_TEST} or
|
2466 |
|
|
@env{ALT_CXX_UNDER_TEST} is @code{same}, each test is built using
|
2467 |
|
|
the compiler under test but with combinations of the options from
|
2468 |
|
|
@env{COMPAT_OPTIONS}.
|
2469 |
|
|
|
2470 |
|
|
To run only the C++ compatibility suite using the compiler under test
|
2471 |
|
|
and another version of GCC using specific compiler options, do the
|
2472 |
|
|
following from @file{@var{objdir}/gcc}:
|
2473 |
|
|
|
2474 |
|
|
@smallexample
|
2475 |
|
|
rm site.exp
|
2476 |
|
|
make -k \
|
2477 |
|
|
ALT_CXX_UNDER_TEST=$@{alt_prefix@}/bin/g++ \
|
2478 |
|
|
COMPAT_OPTIONS="@var{lists as shown above}" \
|
2479 |
|
|
check-c++ \
|
2480 |
|
|
RUNTESTFLAGS="compat.exp"
|
2481 |
|
|
@end smallexample
|
2482 |
|
|
|
2483 |
|
|
A test that fails when the source files are compiled with different
|
2484 |
|
|
compilers, but passes when the files are compiled with the same
|
2485 |
|
|
compiler, demonstrates incompatibility of the generated code or
|
2486 |
|
|
runtime support. A test that fails for the alternate compiler but
|
2487 |
|
|
passes for the compiler under test probably tests for a bug that was
|
2488 |
|
|
fixed in the compiler under test but is present in the alternate
|
2489 |
|
|
compiler.
|
2490 |
|
|
|
2491 |
|
|
The binary compatibility tests support a small number of test framework
|
2492 |
|
|
commands that appear within comments in a test file.
|
2493 |
|
|
|
2494 |
|
|
@table @code
|
2495 |
|
|
@item dg-require-*
|
2496 |
|
|
These commands can be used in @file{@var{testname}_main.@var{suffix}}
|
2497 |
|
|
to skip the test if specific support is not available on the target.
|
2498 |
|
|
|
2499 |
|
|
@item dg-options
|
2500 |
|
|
The specified options are used for compiling this particular source
|
2501 |
|
|
file, appended to the options from @env{COMPAT_OPTIONS}. When this
|
2502 |
|
|
command appears in @file{@var{testname}_main.@var{suffix}} the options
|
2503 |
|
|
are also used to link the test program.
|
2504 |
|
|
|
2505 |
|
|
@item dg-xfail-if
|
2506 |
|
|
This command can be used in a secondary source file to specify that
|
2507 |
|
|
compilation is expected to fail for particular options on particular
|
2508 |
|
|
targets.
|
2509 |
|
|
@end table
|
2510 |
|
|
|
2511 |
|
|
@node Torture Tests
|
2512 |
|
|
@section Support for torture testing using multiple options
|
2513 |
|
|
|
2514 |
|
|
Throughout the compiler testsuite there are several directories whose
|
2515 |
|
|
tests are run multiple times, each with a different set of options.
|
2516 |
|
|
These are known as torture tests.
|
2517 |
|
|
@file{lib/torture-options.exp} defines procedures to
|
2518 |
|
|
set up these lists:
|
2519 |
|
|
|
2520 |
|
|
@table @code
|
2521 |
|
|
@item torture-init
|
2522 |
|
|
Initialize use of torture lists.
|
2523 |
|
|
@item set-torture-options
|
2524 |
|
|
Set lists of torture options to use for tests with and without loops.
|
2525 |
|
|
Optionally combine a set of torture options with a set of other
|
2526 |
|
|
options, as is done with Objective-C runtime options.
|
2527 |
|
|
@item torture-finish
|
2528 |
|
|
Finalize use of torture lists.
|
2529 |
|
|
@end table
|
2530 |
|
|
|
2531 |
|
|
The @file{.exp} file for a set of tests that use torture options must
|
2532 |
|
|
include calls to these three procedures if:
|
2533 |
|
|
|
2534 |
|
|
@itemize @bullet
|
2535 |
|
|
@item It calls @code{gcc-dg-runtest} and overrides @var{DG_TORTURE_OPTIONS}.
|
2536 |
|
|
|
2537 |
|
|
@item It calls @var{$@{tool@}}@code{-torture} or
|
2538 |
|
|
@var{$@{tool@}}@code{-torture-execute}, where @var{tool} is @code{c},
|
2539 |
|
|
@code{fortran}, or @code{objc}.
|
2540 |
|
|
|
2541 |
|
|
@item It calls @code{dg-pch}.
|
2542 |
|
|
@end itemize
|
2543 |
|
|
|
2544 |
|
|
It is not necessary for a @file{.exp} file that calls @code{gcc-dg-runtest}
|
2545 |
|
|
to call the torture procedures if the tests should use the list in
|
2546 |
|
|
@var{DG_TORTURE_OPTIONS} defined in @file{gcc-dg.exp}.
|
2547 |
|
|
|
2548 |
|
|
Most uses of torture options can override the default lists by defining
|
2549 |
|
|
@var{TORTURE_OPTIONS} or add to the default list by defining
|
2550 |
|
|
@var{ADDITIONAL_TORTURE_OPTIONS}. Define these in a @file{.dejagnurc}
|
2551 |
|
|
file or add them to the @file{site.exp} file; for example
|
2552 |
|
|
|
2553 |
|
|
@smallexample
|
2554 |
|
|
set ADDITIONAL_TORTURE_OPTIONS [list \
|
2555 |
|
|
@{ -O2 -ftree-loop-linear @} \
|
2556 |
|
|
@{ -O2 -fpeel-loops @} ]
|
2557 |
|
|
@end smallexample
|